let list = [
{id:1,name:'部门 A',parentId:0},
{id:2,name:'部门 B',parentId:0},
{id:3,name:'部门 C',parentId:1},
{id:4,name:'部门 D',parentId:1},
{id:5,name:'部门 E',parentId:2},
{id:6,name:'部门 F',parentId:3},
{id:7,name:'部门 G',parentId:2},
{id:8,name:'部门 H',parentId:4}
]
function convert(list) {
let arr = []
let obj = list.reduce((res, v) => (res[v.id]=v, res), {})
for(let item of list){
if (item.parentId == 0){
arr.push(item)
continue
}
let parent = obj[item.parentId]
parent.children = parent.children || []
parent.children.push(item)
}
return arr
}
解题:
1. 先将数据转换成以id为key. 自身为value的对象, 实现数据的扁平。
2. 然后利用对象数据类型是地址引用这个原理, 修改obj中的对象会同步修改arr的对象, 从而实现树的生成