gpt4 book ai didi

javascript - 如何 trim/删除嵌套/树状JSON中的节点?

转载 作者:行者123 更新时间:2023-12-02 08:39:24 25 4
gpt4 key购买 nike

我有以下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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com