扁平数组转Tree

83 阅读1分钟
        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 },
        ]
        const treeFuncOptimized = (arr, pid = 0) => {
            const map = new Map()
            // 先将pid一致的放到一起
            arr.forEach((item,index) => {
                if (!map.has(item.pid)) {
                    map.set(item.pid, [])
                }
                map.get(item.pid).push(item)
            })
            const buildTree = (parentId) => {
                const children = map.get(parentId) || []
                // 确定上下级关系
                children.forEach((child) => {
                    //上级的id = 下级的pid
                    child.children = buildTree(child.id)
                })

                return children
            }

            return buildTree(pid)
        }
 console.log(treeFuncOptimized(arr,0))

先将pid一样的对象放到同一个数组中,再通过buildTree函数进行递归转为树结构