方式一:递归
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)