如何将下列数组转化为树形结构

58 阅读1分钟

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);