js数组转tree和tree转数组

262 阅读1分钟

city-6.jpg

原始数据

const 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 res = [
    {
        id: 1,
        name: "部门1",
        pid: 0,
        children: [
            {
                id: 2,
                name: "部门2",
                pid: 1,
                children: []
            },
            {
                id: 3,
                name: "部门3",
                pid: 1,
                children: [
                    {
                        id: 4,
                        name: "部门4",
                        pid: 3,
                        children: [
                            {
                                id: 5,
                                name: "部门5",
                                pid: 4,
                                children: []
                            }
                        ]
                    }
                ]
            }
        ]
    }
]

直接上代码(不足之处多多指教)

  • 方法一
const getTreeList = (arr, id, list) => {
    for (let item of arr) {
        if (item.pid == id) {
            list.push(item);
        }
    }
    for (let i of list) {
        i.children = [];
        getTreeList(arr, i.id, i.children);
        if (i.children.length == 0) {
            delete i.children;
        }
    }
    return list;
};
const res = getTreeList(arr,0, [])
console.log(res);
  • 方法二
 function getTreeList(arr,id){
      let temp=[]
      arr.forEach(i => {
        if(i.pid == id){
          temp.push({
            ...i,
            children:getTreeList(arr,i.id)
          })
        }
      });
      return temp
     }
    const res = getTreeList(arr,0);
    console.log(res);

反转tree转数组

const treeList = [
    {
        id: 1,
        name: "部门1",
        pid: 0,
        children: [
            {
                id: 2,
                name: "部门2",
                pid: 1,
                children: []
            },
            {
                id: 3,
                name: "部门3",
                pid: 1,
                children: [
                    {
                        id: 4,
                        name: "部门4",
                        pid: 3,
                        children: [
                            {
                                id: 5,
                                name: "部门5",
                                pid: 4,
                                children: []
                            }
                        ]
                    }
                ]
            }
        ]
    }
]

直接上代码(不足之处多多指教)

const treeToArr = (data)=>{
    let temp = []
    const deeplist = (data)=>{
        data.forEach(i=>{
            temp.push({
                id:i.id,
                name:i.name,
                pid:i.pid
            })
            if(i.children.length>0){
                deeplist(i.children)
            }
        })
    }
    deeplist(data)
    return temp
}

console.log(treeToArr(treeList));

欢迎大家补充

haha.png