JS数组与树互转

79 阅读1分钟

let arr = [{ id:4, name:'ddd', pid:'1', },{ id:7, name:'ggg', pid:'2', },{ id:8, name:'hhh', pid:'6', },{ id:5, name:'eee', pid:'3', },{ id:6, name:'fff', pid:'2', },{ id:1, name:'aaa', pid:'0', },{ id:2, name:'bbb', pid:'0', },{ id:3, name:'ccc', pid:'0', },{ id:9, name:'iii', pid:'8', },{ id:10, name:'jjj', pid:'1', },{ id:11, name:'kkk', pid:'10', }]

//数组转树
function arrayToTree(arr,pid = 0){
  return arr.reduce((list,cur)=>{
    if(cur.pid == pid){
      list.push(cur)
      let children = arrayToTree2(arr,cur.id)
      if(children.length){cur.children = children}
    }
    return list
  },[])
}

let tree = arrayToTree(arr)
console.log(tree);

//树转数组
function treeToArray(tree){
  return tree.reduce((arr,cur)=>{
    if(cur.children&&cur.children.length){
      const children = treeToArray(cur.children)
      delete cur.children
      arr.push(cur,...children)
    }else{
      arr.push(cur)
    }
    return arr
  },[])
}

let list = treeToArray(tree)
console.log(list)