根据 id和parentId相等的映射关系,打平数据构建tree数据
例如一维数组
[ {name: ‘A’, id: 0, parentId: null}, {name: ‘B’, id: 1, parentId: 0} ]
想要这种结构 B是A的子集中的元素
[ {name: ‘A’, id, parentId: null, children: [{name: ‘B’, id, parentId: null}]} ]
传统做法 嵌套for循环遍历对比 略
// map映射处理
list =
[
{ id: 3, name: '节点C', parentId: 2 },
{ id: 6, name: '节点F', parentId: 5 },
{ id: 0, name: 'root', parentId: null },
{ id: 1, name: '节点A', parentId: 0 },
{ id: 8, name: '节点H', parentId: 7 },
{ id: 4, name: '节点D', parentId: 3 },
{ id: 2, name: '节点B', parentId: 1 },
{ id: 5, name: '节点E', parentId: 4 },
{ id: 7, name: '节点G', parentId: 6 },
{ id: 9, name: '节点I', parentId: 8 }
]
const map = {};
list.forEach(i => {
map[i.id] = i;
});
const _list = [];
list.forEach(i => {
if(map[i.parentId]) {
if(!map[i.parentId]?.children) {
map[i.parentId].children = [i];
}else {
map[i.parentId].children.push(i);
}
}else if(!i.parentId){
_list.push(i);
}
});
console.log('_list', _list);