let arr=[
{id:1,parent:null},
{id:3,parent:1},
{id:2,parent:1},
{id:6,parent:3},
{id:4,parent:2},
{id:5,parent:2},
{id:7,parent:3},
{id:8,parent:1},
]
id为当前节点id,parent为父元素的节点id,现需要将该数组根据id和parent转化为一个树形结构,思路如下
(1)将各节点和其子元素整理出如下结构
let obj={
null:[{id:1,parent:null}],
1:[{id:3,parent:1},{id:2,parent:1},{id:8,parent:1}],
2:[{id:4,parent:2},{id:5,parent:2}],
3:[{id:6,parent:3},{id:7,parent:3}],
4:[],
5:[],
6:[],
7:[{id:9, parent:7}],
8:[]
}
(2)使用递归函数,将map解析为树形结构
let target=obj[null][0];
target['children']=getChildren(target.id);
console.log('target:',target)
function getChildren(id){
const arr = obj[id] || null;
if(arr && arr.length>0){
for(let item of arr){
const _id=item.id;
const children = getChildren(_id);
if(children && children.length>0) item['children'] = children;
}
}
return arr;
}
时间复杂度 O(n);