给定一个如下结构的list数组,找出对应的pid的id,即pid对应的id就是它的父亲节点。
如下结构简称扁平结构
const list = [
{ id:1,pid:0,value:"宋唐" },
{ id:2,pid:1,value:"宋唐1" },
{ id:3,pid:1,value:"宋唐2" },
{ id:4,pid:1,value:"宋唐3" },
{ id:5,pid:0,value:"刘" },
{ id:6,pid:5,value:"刘1" },
{ id:7,pid:5,value:"刘2" },
{ id:8,pid:5,value:"刘3" },
{ id:9,pid:0,value:"雅典娜" },
{ id:10,pid:9,value:"雅典娜" },
{ id:11,pid:10,value:"雅典娜2" },
{ id:12,pid:11,value:"雅典娜3" },
{ id:13,pid:12,value:"雅典娜4" },
{ id:14,pid:13,value:"雅典娜5" },
{ id:15,pid:14,value:"雅典娜6" },
{ id:16,pid:0,value:"铠爹" }
];
经过转换后输出这样的嵌套children结构:
const reverseList = [
{
id: 1,
value: "宋唐",
children: [
{
id: 2,
value: "宋唐1",
children: [],
},
{
id: 3,
value: "宋唐2",
children: [],
},
{
id: 4,
value: "宋唐3",
children: [],
}
]
},
{
id: 5,
value: "刘",
children: [
{
id: 6,
value: "刘1",
children: []
},
{
id: 7,
value: "刘2",
children: []
},
{
id: 8,
value: "刘3",
children: []
}
]
},
{
id: 9,
value: "雅典娜",
children: [
{
id: 10,
value: "雅典娜1",
children:[
{
id: 11,
value: "雅典娜2",
children: [
{
id: 12,
value: "雅典娜3",
children: [
{
id: 13,
value: "雅典娜4",
children: [
{
id: 14,
value: "雅典娜5",
children: [
{
id: 15,
value: "雅典娜6",
children: []
}
]
}
]
}
]
}
]
}
]
}
]
},
{
id: 16,
value: "铠爹",
children:[]
}
];
1. 扁平结构->children结构
function filterPidTree(arrList) {
const toTree=(id)=> {
let childList = []
let marchArr = arrList.filter(item=> {
return item.pid === id;
})
marchArr.forEach(item=> {
item.children = toTree(item.id);
childList.push(item);
})
return childList;
}
return toTree(0);
}
2. children结构->扁平结构
function filterList(list) {
const res = [];
const dfs=(data, pid)=> {
data.forEach(item=> {
const result = {
id: item.id,
pid,
value: item.value,
}
res.push(result)
if (item.children.length > 0) {
dfs(item.children, item.id);
}
})
}
dfs(list, 0)
return res;
}