扁平化变树

304 阅读1分钟
function toTree(
    data,
    id = 'id',
    pid = 'pid',
    children = 'children'
){
    const result = []
    if(!Array.isArray(data)){
        return result 
    }    
    data.forEach(item=>{
        delete item[children]
    })
    const map={}
    data.forEach(item=>{
        map[item[id]] = item
    })
    data.forEach(item =>{
        const parent = map[item[pid]]
        if(parent){
            (parent[children] || (parent[children] = [])).push(item)
        } else {
            result.push(item)
        }
    })
    return result
}
let arr = [
    {id: 1, name: '部门1', pid: 0},
    {id: 2, name: '部门2', pid: 1},
    {id: 3, name: '部门3', pid: 1},
    {id: 4, name: '部门4', pid: 3},
    {id: 5, name: '部门5', pid: 4},
]
toTree(arr)

输出结果:

[
    {
        "id": 1,
        "name": "部门1",
        "pid": 0,
        "children": [
            {
                "id": 2,
                "name": "部门2",
                "pid": 1,
                "children": []
            },
            {
                "id": 3,
                "name": "部门3",
                "pid": 1,
                "children": [
                    // 结果 ,,,
                ]
            }
        ]
    }
]