我有一个像这样的平面数组,其中包含具有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
}
}
}
答案 0 :(得分:1)
您可以采用迭代方法,使用一个对象同时为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; }