我使用KnockoutJS,有一個多維數組觀察到的屬性值(對象):刪除從多維Javascript數組中的項目的基礎上,
self.navItems = ko.observableArray([
{ name: "test1", children: [
{ name: "test1child1", children: [] },
{ name: "test1child2", children: [] }
]},
{ name: "test2", children: [] },
]);
我希望能夠刪除的一個基於屬性值的對象。在其他作品中,我想要做的事情是:
我寫了一個功能,但無法得到它的工作,因爲它尋找「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的內置刪除/的removeAll方法。
感謝下面的評論者,我已經部分工作,但是當我嘗試刪除兒童內部的東西時[],它也會刪除整個父代。
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;
});
};
謝謝! 1我有這個問題,它似乎適用於頂級物品,但沒有第二或第三級物品。 – dmathisen 2013-03-12 15:22:39
你是否指代你的代碼中的兒童數組? – 2013-03-12 15:24:38
是的,確切地說。我想我可以在返回之前使用if(item.children.length> 0){...}來使它工作。我會玩弄它。 – dmathisen 2013-03-12 15:26:50