js数组转化为树状结构

62 阅读1分钟
方式一:递归
const addTree = (arr, pid) => {
    let result = []
    handleList(arr, result, pid)
    return result
}

const handleList = (arr, result, pid) => {
    for(const item of arr){
        if(item.pid === pid){
            const obj = {...item, child: []}
            result.push(obj)
            handleList(arr, obj.child, item.id)
        }
    }
}

addTree([], 0)

方式二
const addTree = (arr) => {
    let result = []
    let treeMap = {}
    for(const item of arr){
        const id = item.id
        const pid = item.pid
        if(!treeMap[id]){
            treeMap[id] = { child: [] }
        }
        treeMap[id] = { ...item, child: treeMap[id].child }
        if(pid === 0){
            result.push( treeMap[id] )
        }
        if(!treeMap[pid]){
            treeMap[pid] = { child: [] }
        }
        treeMap[pid].child.push( treeMap[id] )
    }
    return result
}
addTree([], 0)