实现一个函数将对象结构转成在树形结构

// 原始 list 如下
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}
];
const result = convert(list, ...);

解:

function convert () {
    let res = []
    let temp = {}
    for (let i = 0; i < list.length; i++) {
        temp[list[i].id] = list[i]; // 以id作为索引存储元素,可以无需遍历直接定位元素
    }
    for (let j = 0; j < list.length; j++) {
        const item = list[j]
        const current = temp[item.id]
        if (item.parentId === 0) {
            res.push(current)
        } else {
            if (!temp[item.parentId]['children']) temp[item.parentId].children = []
            temp[item.parentId].children.push(item)
        }
    }
    return res
}