原文章 加上了注释
扁平转树形
function convert(list){
const res=[ ]
//相当于map字典,用来查找
const obj=list.reduce((pre,cur)=>{
pre[cur.id]=cur
return pre
},{})
for(let item of list){
//根节点直接放结果数组
if(item.parent_id===0){
res.push(item)
continue
//否则就在字典里寻找父节点
}else{
let parent=obj[item.parent_id]
//直接往父节点上加孩子,如果已经加过孩子就直接push进去,因为是引用类型,所以obj修改res直接被修改
parent.children=parent.children||[]
parent.children.push(item)
}
}
return res
}
console.log(convert(flatArr))
树形转扁平
function flatten(arr){
return arr.reduce((pre,cur)=>{
let {children=[],...item}=cur
return pre.concat( [{...item}],flatten(children))
},[])
}