如何将扁平的数组处理成树形结构
突然觉得好像挺常用的,记下来方便以后抄。
初始数组:
const list = [ { id: "1", pid: "" }, { id: "2", pid: "1" }, { id: "3", pid: "1" }, { id: "4", pid: "2" }, { id: "5", pid: "3" }, ];
最终结构:
[
{
"id": "1",
"pid": "",
"second": [
{
"id": "2",
"pid": "1",
"second": [
{
"id": "4",
"pid": "2"
}
]
},
{
"id": "3",
"pid": "1",
"second": [
{
"id": "5",
"pid": "3"
}
]
}
]
}
]
方法:
concatList(data) {
const newObj = {};
data.forEach((item) => {
newObj[item.id] = item;
});
const newData = [];
data.forEach((item) => {
const parentObj = newObj[item.pid];
if (parentObj) {
parentObj.second = [...(parentObj.second || []), item];
} else {
newData.push(item);
}
});
return newData;
}
思路:
把初始数组全部放到一个对象中,用id做key值,对象内容就是其value;
然后遍历初始数组的数据,如果数据的pid在对象里能找到对应的key,就说明他的pid=这个id,就塞到那个数据的second(可以理解为children)里;
如果这个数据没有在对象里找到对应的key,就说明他自己是一个父节点,直接塞入新数组里。

浙公网安备 33010602011771号