从JavaScript的平板阵列构建树阵 [英] Build tree array from flat array in javascript
问题描述
我有我有JavaScript来使其分层,为了以后建立树来处理复杂的JSON文件。
JSON的每一个入口为:
ID:一个唯一的ID,
parentId的:父节点的ID(它是0,如果该节点是树的根)
级:深度的树中的水平
JSON数据已经是有序的。我的意思是一个条目将有上面本身就是一个父节点或兄弟节点,并根据自身的子节点或兄弟节点。
输入:
{
人物:
{
ID:12,
parentId的:0,
文:人
1级,
孩子:空
},
{
ID:6,
parentId的:12,
文:男孩,
级别:2,
孩子:空
},
{
ID:7
parentId的:12,
文:其他,
级别:2,
孩子:空
},
{
ID:9
parentId的:0,
文:女人,
1级,
孩子:空
},
{
ID:11
parentId的:9,
文:女孩,
级别:2,
孩子:空
}
]
动物:
{
ID:5,
parentId的:0,
文:狗,
1级,
孩子:空
},
{
ID:8
parentId的:5,
文:小狗,
级别:2,
孩子:空
},
{
ID:10
parentId的:13,
文:猫,
1级,
孩子:空
},
{
ID:14,
parentId的:13,
文:小猫
级别:2,
孩子:空
},
]
}
期望的输出:
{
人物:
{
ID:12,
parentId的:0,
文:人
1级,
孩子:
{
ID:6,
parentId的:12,
文:男孩,
级别:2,
孩子:空
},
{
ID:7
parentId的:12,
文:其他,
级别:2,
孩子:空
}
]
},
{
ID:9
parentId的:0,
文:女人,
1级,
孩子:
{ ID:11
parentId的:9,
文:女孩,
级别:2,
孩子:空
}
} ] 动物:
{
ID:5,
parentId的:0,
文:狗,
1级,
孩子:
{
ID:8
parentId的:5,
文:小狗,
级别:2,
孩子:空
}
},
{
ID:10
parentId的:13,
文:猫,
1级,
孩子:
{
ID:14,
parentId的:13,
文:小猫
级别:2,
孩子:空
}
} ]
}
这是相当容易的,如果你把所有的节点作为参考的事情。
VAR节点= [
{
ID:12,
parentId的:0,
文:人
1级,
孩子:空
},{/*...*/}];VAR地图= {},节点,根= [];
对于(VAR I = 0; I< nodes.length; I + = 1){
节点=节点[I]
node.children = [];
图[node.id] =我; //使用地图查找了父母
如果(node.parentId!==0){
节点[图[node.parentId] children.push(节点)。
}其他{
roots.push(节点);
}
}
的console.log(根); //< - 有你的树
I have a complex json file that I have to handle with javascript to make it hierarchical, in order to later build a tree. Every entry of the json has : id : a unique id, parentId : the id of the parent node (which is 0 if the node is a root of the tree) level : the level of depth in the tree
The json data is already "ordered". I mean that an entry will have above itself a parent node or brother node, and under itself a child node or a brother node.
Input :
{
"People": [
{
"id": "12",
"parentId": "0",
"text": "Man",
"level": "1",
"children": null
},
{
"id": "6",
"parentId": "12",
"text": "Boy",
"level": "2",
"children": null
},
{
"id": "7",
"parentId": "12",
"text": "Other",
"level": "2",
"children": null
},
{
"id": "9",
"parentId": "0",
"text": "Woman",
"level": "1",
"children": null
},
{
"id": "11",
"parentId": "9",
"text": "Girl",
"level": "2",
"children": null
}
],
"Animals": [
{
"id": "5",
"parentId": "0",
"text": "Dog",
"level": "1",
"children": null
},
{
"id": "8",
"parentId": "5",
"text": "Puppy",
"level": "2",
"children": null
},
{
"id": "10",
"parentId": "13",
"text": "Cat",
"level": "1",
"children": null
},
{
"id": "14",
"parentId": "13",
"text": "Kitten",
"level": "2",
"children": null
},
]
}
Expected output :
{
"People": [
{
"id": "12",
"parentId": "0",
"text": "Man",
"level": "1",
"children": [
{
"id": "6",
"parentId": "12",
"text": "Boy",
"level": "2",
"children": null
},
{
"id": "7",
"parentId": "12",
"text": "Other",
"level": "2",
"children": null
}
]
},
{
"id": "9",
"parentId": "0",
"text": "Woman",
"level": "1",
"children":
{
"id": "11",
"parentId": "9",
"text": "Girl",
"level": "2",
"children": null
}
}
],
"Animals": [
{
"id": "5",
"parentId": "0",
"text": "Dog",
"level": "1",
"children":
{
"id": "8",
"parentId": "5",
"text": "Puppy",
"level": "2",
"children": null
}
},
{
"id": "10",
"parentId": "13",
"text": "Cat",
"level": "1",
"children":
{
"id": "14",
"parentId": "13",
"text": "Kitten",
"level": "2",
"children": null
}
}
]
}
This is fairly easy to do if you keep all the nodes as references.
var nodes = [
{
"id": "12",
"parentId": "0",
"text": "Man",
"level": "1",
"children": null
}, { /*...*/ } ];
var map = {}, node, roots = [];
for (var i = 0; i < nodes.length; i += 1) {
node = nodes[i];
node.children = [];
map[node.id] = i; // use map to look-up the parents
if (node.parentId !== "0") {
nodes[map[node.parentId]].children.push(node);
} else {
roots.push(node);
}
}
console.log(roots); // <-- there's your tree
这篇关于从JavaScript的平板阵列构建树阵的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!