Khi*_*yar -2 javascript arrays tree
我有一个数组如下
arr = [
{
id: 1,
name: 'Node1',
level: 1
},
{
id: 2,
name: 'Node2',
level: 2
},
{
id: 3,
name: 'Node3',
level: 3
},
{
id: 4,
name: 'Node4',
level: 4
},
{
id: 5,
name: 'Node5',
level: 5
},
];
Run Code Online (Sandbox Code Playgroud)
我想根据级别生成树。输出应该是
tree =
{
id: 1,
name: 'Node1',
level: 1,
nodes: {
id: 2,
name: 'Node2',
level: 2,
nodes : {
id: 3,
name: 'Node3',
level: 3,
nodes: {
id: 4,
name: 'Node4',
level: 4,
nodes : {
id: 5,
name: 'Node5',
level: 5,
nodes: []
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
每当节点 = [] 时,这意味着它是最后一个节点。数组的顺序可以是任何东西,但树应该建立在级别的基础上。
您可以使用 level 属性来指示辅助数组中的嵌套位置。然后迭代数据并在必要时构建子节点。
function getTree(array) {
var levels = [{}];
array.forEach(function (a) {
levels.length = a.level;
levels[a.level - 1].nodes = levels[a.level - 1].nodes || [];
levels[a.level - 1].nodes.push(a);
levels[a.level] = a;
});
return levels[0].nodes;
}
console.log(getTree([{ id: 1, name: 'Node1', level: 1 }, { id: 2, name: 'Node2', level: 2 }, { id: 3, name: 'Node3', level: 3 }, { id: 4, name: 'Node4', level: 4 }, { id: 5, name: 'Node5', level: 5 }]));
console.log(getTree([{ id: 1, name: 'Node 1', level: 1 }, { id: 2, name: 'Node 1.1', level: 2 }, { id: 3, name: 'Node 1.1.1', level: 3 }, { id: 4, name: 'Node 1.1.1.1', level: 4 }, { id: 5, name: 'Node 1.2', level: 2 }, { id: 6, name: 'Node 1.2.1', level: 3 }, ]));Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)