JavaScript - 拆分分层数组或JSON对象的一个​​分支

时间:2011-09-23 17:22:00

标签: javascript arrays json

我有一个JSON对象,它是一个嵌套数组,具有以下形式:

{
    "name": "Math",
    "children": [
        {
            "name": "Trigonometry",
            "children": [
                {
                    "name": "Right Triangles and an Introduction to Trigonometry",
                    "children": [
                        {
                            "name": "The Pythagorean Theorem",
                            "children": [
                                {
                                    "name": "The Pythagorean Theorem",
                                    "size": 30
                                },
                                {
                                    "name": "Pythagorean Triples",
                                    "size": 52
                                },
                                {
                                    "name": "Converse of the Pythagorean Theorem",
                                    "size": 13
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "name": "Algebra",
            "children": [
                {
                    "name": "Equations and Functions",
                    "children": [
                        {
                            "name": "Variable Expressions",
                            "children": [
                                {
                                    "name": "Evaluate Algebraic Expressions",
                                    "size": 26
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

完整数组实际上要大得多,可以看到here。我正在使用它来使用D3.js(或者其他库)构建交互式图形和图表。因为它太大了,我希望能够通过分支拆分数组。换句话说,要划分出阵列的特定分支。

例如,有没有办法拉出节点“三角函数”及其所有子节点?还是“代数”及其所有孩子?然后“三角函数”或“代数”将成为新的根节点或父节点。

2 个答案:

答案 0 :(得分:1)

虽然关于JSON查询语言的注释可能会为您提供正确的解决方法,但没有内置方法可以执行此类操作。

实际上,问题在于您以一种非常难以使用的方式构建数据。如果不是

{
    name: "key",
    children: [...]
}
你刚刚做了

{
    "key": [...]
}

然后你可以简单地myObject["key"]来获得你想要的数组。

例如:

var math = {
    "Trigonometry": {
        "Right Triangles and an Introduction to Trigonometry": {
            "The Pythagorean Theorem": {
                "The Pythagorean Theorem": 30,
                "Pythagorean Triples": 52,
                "Converse of the Pythagorean Theorem": 13
            }
        }
    },
    "Algebra": {
        "Equations and Functions": {
            "Variable Expressions": {
                "Evaluate Algebraic Expressions": 26
            }
        }
    }
};
var trigonometry = math["Trigonometry"];
var expressionsAndFunctions = math["Algebra"]["Expressions and Functions"];

作为奖励,这要短得多!

答案 1 :(得分:0)

Array的splice函数应该这样做。这将做的是删除给定索引处的元素并将其返回。

如果您只想要特定分支的快捷方式,那么您也不能只使用

var trig = tree ['trigonometry'];

到达那里。这不会改变原始对象,购买将为您提供一种更简单的方式来访问内部的节点。