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函数进行递归转为树结构