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

标签 javascript d3.js

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

相关文章:

javascript - 具有缺失值的多系列图表 (D3)

javascript - Webpack 4 中 css-loader 的 importLoaders 选项到底是什么?

javascript - enter() 选择上的 extra select() 究竟做了什么?

javascript - 如何使用从 csv 文件过滤的数据创建多系列折线图?

javascript - 如何使用图例切换折线图中的线条

javascript - 我应该如何在 d3js 中使用嵌套数据

javascript - 使用 JavaScript 多次打开同一个窗口

javascript - 有人可以为我指出正确的方向,使一个 javascript 文件在另一个单独的 javascript 文件之后运行吗?

Javascript 如果输出为 0,则不打印

javascript - 如何使用 jquery 对 2 列数据表进行乘法和求和? - 数据表