[英]remove an element from array with structure of n-ary tree
我有一个像下面这样的数组:
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中执行此操作,而不是遍历数组中的每个节点?
你可以使用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);
}
}
});
这样,如果将来数组的内容发生变化,则不必更新代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.