我有以下JSON示例代表一棵树。
[
{
"label": "node1",
"children": [
{
"label": "Human"
},
{
"label": "Chimpanzee"
}
]
},
{
"label": "node2",
"children": [
{
"label": "node3",
"children": [
{
"label": "Rat"
},
{
"label": "Mouse"
}
]
},
{
"label": "BigRat"
}
]
}
]
我现在想做的是:
给定标签列表(例如BigRat,Mouse),如何删除JSON中的相应节点?
我只是无法解决这个问题。
任何帮助深表感谢!
谢谢
最佳答案
由于树本质上是一个对象数组,每个对象都有一个标签和一个可选的子数组,因此需要修剪的是主树数组或其分支之一中的数组元素。
您绝对不希望使用delete
删除数组元素,因为那样会使您的数组稀疏。相反,您应该splice
输出数组元素。
另一方面,您应该使用delete
删除对象属性,例如children
一旦为空。这是我要使用的代码:
function prune(array, label) {
for (var i = 0; i < array.length; ++i) {
var obj = array[i];
if (obj.label === label) {
// splice out 1 element starting at position i
array.splice(i, 1);
return true;
}
if (obj.children) {
if (prune(obj.children, label)) {
if (obj.children.length === 0) {
// delete children property when empty
delete obj.children;
// or, to delete this parent altogether
// as a result of it having no more children
// do this instead
array.splice(i, 1);
}
return true;
}
}
}
}
现在假设您的树名为
tree
,而您想要修剪的标签为node3
,您将这样调用prune:var wasItPruned = prune(tree, "node3");
关于javascript - 如何 trim/删除嵌套/树状JSON中的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17964757/