Javascript 如何修剪/删除嵌套/树状JSON中的节点?
我有下面的JSON示例来表示一棵树Javascript 如何修剪/删除嵌套/树状JSON中的节点?,javascript,d3.js,Javascript,D3.js,我有下面的JSON示例来表示一棵树 [ { "label": "node1", "children": [ { "label": "Human" }, { "label": "Chimpanzee" } ] }, { "label": "node2",
[
{
"label": "node1",
"children": [
{
"label": "Human"
},
{
"label": "Chimpanzee"
}
]
},
{
"label": "node2",
"children": [
{
"label": "node3",
"children": [
{
"label": "Rat"
},
{
"label": "Mouse"
}
]
},
{
"label": "BigRat"
}
]
}
]
我现在想做的是:
给定一个标签列表(例如BigRat、Mouse),如何删除JSON中的相应节点
我就是想不起来
非常感谢您的帮助
谢谢因为树本质上是一个对象数组,其中每个对象都有一个标签和一个可选的子数组,所以需要修剪的是主树数组或它的一个分支中的数组元素 您肯定不想使用
delete
删除数组元素,因为这样会留下稀疏数组。相反,您应该将拼接出数组元素
另一方面,您应该使用delete
来删除对象属性,例如子对象
一旦为空。以下是我将使用的代码:
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;
}
}
}
}
为..使用
。。在
循环或对象中。使用普通循环键
迭代对象的元素,使用普通for循环键迭代数组。通过使用delete
从对象中删除元素,或者通过使用splice从数组中将元素设置为null。我假设在执行此操作时,您没有处理JSON(一种文本序列化形式),而是内存中的对象图?您可能希望删除节点的可视化,而不是更改JSON本身。。。因此,显示你的D3.js脚本将帮助我们帮助你。另一方面,如果你真的想编辑你的JSON,这与D3.js无关,所以你应该为每个人清除它……它是有效的,但是你如何删除内部节点呢。如果删除了两个叶节点,则还需要删除相应的父节点。请编辑代码以演示由于没有更多子节点而删除父节点的替代方案。谢谢
var wasItPruned = prune(tree, "node3");