我有典型的组织层次结构
。例如。
D,E is reporting to B. B,C is reporting to A.
A 是最顶层的 Node 。但我收到的数据是一个平面数组,带有一个指向父级的属性。
[{
name: "A",
parent: null
},
{
name: "B",
parent: "A"
},
{
name: "C",
parent: "A"
},
{
name: "D",
parent: "B"
},
{
name: "E",
parent: "B"
}]
但我想将其转换为单个嵌套对象
或树
。根 Node 具有嵌入子 Node 的子 Node 属性,每个子 Node 都有自己的子 Node 属性,如下所示。
{
name: "A",
children: [{
name: "C"
children: [{
name: "D"
},{
name: "E"
}]
},{
name: "C"
}]
}
我怎样才能在 javascript 中有效地做到这一点?
最佳答案
与其他解决方案不同,它使用单个循环 - 数据的顺序不重要 - 示例与问题的顺序不同
var peeps = [
{ name: "D", parent: "B" },
{ name: "B", parent: "A" },
{ name: "A", parent: null },
{ name: "C", parent: "A" },
{ name: "E", parent: "B" }
];
var tree;
var obj = {};
peeps.forEach(function (peep) {
var name = peep.name,
parent = peep.parent,
a = obj[name] || { name: name };
if (parent) {
obj[parent] = obj[parent] || { name: parent };
obj[parent].children = obj[parent].children || [];
obj[parent].children.push(a);
} else {
tree = obj[name];
}
obj[name] = obj[name] || a;
});
console.log(tree);
关于javascript - 在javascript中将数组转换为嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34679603/