我有一个像这样的平面数组,其中包含具有 ID 和值的数据对象。每个 id 都是唯一的
var data = [{
id: 1,
value: 'as',
parent: 2
}, {
id: 2,
value: 'sasa',
parent: 3
}, {
id: 3,
value: 'sasa',
parent:
}]
我如何在 JavaScript 中创建像“对象”这样的分层树而不是数组,因为我还想访问对象的元素,如 3.2.value
{
id: 3,
value: 'sasa',
parent: '',
2: {
id: 2,
value: 'sasa',
parent: 3,
1: {
id: 1,
value: 'as',
parent: 2
}
}
}
最佳答案
您可以采用迭代方法,使用一个对象来收集并同时为 id
和 parent
创建一个对象以保持它们之间的关系。
最后返回以根为父的属性。
结果略有不同,因为您希望使用节点的 id
作为访问器来寻址节点。
var data = [{ id: 1, value: 'as', parent: 2 }, { id: 2, value: 'sasa', parent: 3 }, { id: 3, value: 'sasa', parent: '' }],
tree = function (data, root) {
return data.reduce(function (r, o) {
Object.assign(r[o.id] = r[o.id] || {}, o);
r[o.parent] = r[o.parent] || {};
r[o.parent][o.id] = r[o.id];
return r;
}, Object.create(null))[root];
}(data, '');
console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 在javascript中创建层次树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53209328/