array 转 tree
function ArrayToTree(arr) {
let allIds=[]
arr.map(item=>{
allIds.push(item.id)
})
let rootList=arr.filter(item=>!allIds.includes(item.pid))
let genger=(r)=>{
r.children=[]
for(let i=0;i<arr.length;i++){
if(arr[i].pid===r.id){
r.children.push(arr[i])
}
}
}
rootList.map(item=>{
genger(item) // 从根节点开始 生成 children
if(item.children&&item.children.length)
{
item.children.map((iChild)=>genger(iChild))
}
})
return rootList
}
let arr = [
{name: "王五0", id: 5, pid: 0},
{name: "王五", id: 3, pid: 0},
{name: "赵六", id: 4, pid: 3},
{name: "吗六", id: 9, pid: 3},
{name: "张三", id: 7, pid: 9},
{name: "张五", id: 10, pid: 4}
]
console.log(ArrayToTree(arr))
tree转array
function treeToArray(tree){
let res=[]
const {children,...rest}=tree
res.push(rest)
const gener=(childrens)=>{
childrens&&childrens.map(item=>{
const {children,...rest}=item
res.push(rest)
if(item.children&&item.children.length){
gener(item.children)
}
})
}
gener(children)
return res;
}