javascript - 删除 knockout 中的子数组项

标签 javascript knockout.js

从可观察数组中删除一个项目(该项目是另一个可观察数组本身的项目)的最佳方法是什么?让我提供一个示例(简化的)。

假设我有一个可观察的数组“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/

相关文章:

javascript - 添加 ajax 后, knockout 可观察数组未更新

javascript - 如何在 JavaScript 中将模式与数组进行匹配?

javascript - Intersection Observer API 触发回调,即使元素不在 View 中

javascript - 在 Lambda 的 node8.10 中获取 API 调用导致 Promise <pending> 和 undefined

javascript - Knockoutjs 可见绑定(bind) ||或者?

javascript - 如何在javascript中使用json将选择列表绑定(bind)到值

javascript - CSS干净的动画重复

javascript - 仅在未设置字符串值时运行,每次都运行

javascript - 带有图像的样式 knockout.js 单选按钮

javascript - 在 KnockoutJS 中使用 bool 值显示隐藏 div 并应用 css 规则