我有一个如下数组:
var data=
[
{"id":"root1","name":"root1","childNodes":
[
{"id":"child1_root1","name":"child1_root1","childNodes":
[
{"id":"child1of_child1_root1","name":"child1of_child1_root1"}
]
},
{"id":"child2_root1","name":"child2_root1","childNodes":[]}
]
},
{"id":"root2","name":"root2","childNodes":
[
{"id":"child1root2","name":"child1root2"}
]
},
{"id":"root3","name":"root3","childNodes":
[
{"id":"child1root3","name":"child1root3"}
]
}
]
现在我要删除一个带有一些id的节点。如果节点有一些子节点,那么它们也应该从数组中删除。
假设我有一系列要删除的id节点:
var nodestobe_removed=["child1_root1","child1root2"];
在第一个节点中有一个子节点,因此节点及其子节点都将被删除。
第二个节点没有子节点,因此只删除此节点。
有没有一种简单的方法可以在 JQuery 中执行此操作,而不是循环遍历数组中的每个节点?
这是link to try。使用控制台查看结果。
答案 0 :(得分:1)
您可以使用inArray()
和splice()
我想...如果您希望能够避免循环:
var data = data.splice(jQuery.inArray(nodestobe_removed[0], data), 1);
这假设您确定nodestobe_removed
中的值位于data
。
但是真的......循环是... ...的主要功能 ... ...编程和东西。
如果您执行以下操作,您的代码会更灵活:
//ECMAScript 5.1+
data.forEach(function(element, index, arr) {
for(var key in element.keys())
{
if(jQuery.inArray(key, nodestobe_removed) != -1)
{
data.splice(index, 1);
}
}
});
这样,如果您的数组内容将来发生变化,则无需更新代码。