从可观察数组中删除一个项目(该项目是另一个可观察数组本身的项目)的最佳方法是什么?让我提供一个示例(简化的)。
假设我有一个可观察的数组“chats”:
self.chats = ko.observableArray();
这是我的聊天对象:
function chat(id, name, members) {
this.id = id;
this.name = name;
this.members = ko.observableArray(members);
}
这是成员对象:
function member(id, username) {
this.id = id;
this.username = username;
}
我想从 chats 数组中删除一个成员,但我只知道该成员的 id,但对它所属的聊天一无所知。有没有比循环遍历所有 chat
项目(使用 ko.utils.arrayForEach
)和所有 member
项目并检查 id 更好的方法?
最佳答案
您可以使用映射将成员 ID 映射到他们所在的任何聊天。IE:
var memberMap = {};
...
//on add
if(!(memberId in memberMap){
memberMap[memberId] = [chatRef]
}
else{
memberMap[memberId].push(chatRef);
}
然后您将缓存对聊天对象的引用,以便您可以直接搜索这些成员列表。
更新
由于显然存在 1-1 成员聊天关系,因此 membermap 代码可以如下所示
var memberMap = {};
...
//on add
memberMap[memberId] = chatRef;
关于javascript - 删除 knockout 中的子数组项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14342029/