原始数据
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));