我有一个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(或者其他库)构建交互式图形和图表。因为它太大了,我希望能够通过分支拆分数组。换句话说,要划分出阵列的特定分支。
例如,有没有办法拉出节点“三角函数”及其所有子节点?还是“代数”及其所有孩子?然后“三角函数”或“代数”将成为新的根节点或父节点。
答案 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'];
到达那里。这不会改变原始对象,购买将为您提供一种更简单的方式来访问内部的节点。