我正在使用 KnockoutJS 并有一个多维可观察数组(对象?):
self.navItems = ko.observableArray([
{ name: "test1", children: [
{ name: "test1child1", children: [] },
{ name: "test1child2", children: [] }
]},
{ name: "test2", children: [] },
]);
我希望能够根据属性值删除其中一个对象。在其他作品中,我想做这样的事情:
removeNavItem("test1child2");
我已经编写了一个函数,但无法让它工作,因为它正在寻找“test1child2”作为属性,而不是值。
self.removeNavItem = function (itemName) {
var item = ko.utils.arrayFirst(self.navItems(), function (item) {
if (item.name === itemName) { // this seems to work correctly
delete self.navItems[itemName]; // this doesn't, because it tests property, not value
}
});
};
编辑:
我不知道 KO 内置的 remove/removeAll 方法。
感谢下面的评论者,我已经部分工作了,但是当我尝试删除 Children[] 内部的某些内容时,它也会删除整个父级。
removeNavItem = function (itemName) {
var items = self.navItems.remove(function (item) {
for (i = 0; i < item.children.length; i++) {
if (item.children[i].name === itemName) {
return item.children[i].name;
}
}
return item.name === itemName;
});
};
最佳答案
如果您希望能够在任何级别使用它,请传入要从中删除它的数组:
self.removeNavItem = function (obsArray, itemName)
{
obsArray.remove(function(item) { return item.name === itemName });
};
然后你可以在每个元素上调用它:
click: function() { $root.removeNavItem($parent.children, $data.name); }
我已经更新了您的jsfiddle ,并且它可以工作,尽管您必须将所有子数组设置为可观察数组才能工作。
关于javascript - 根据属性值从多维 Javascript 数组中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15364838/