扁平数据转树结构

1
2
3
4
5
6
7
8
9
10
11
12
13
var 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}
]
function getRandom () {
return parseInt(Math.random() * 100)
}
for (let i = 6; i < 1000; i++) {
arr.push({id: i, name: `部门${i}`, pid: getRandom()})
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

function arrayToTree(items) {
const result = []; // 存放结果集
const itemMap = {}; //
for (const item of items) {
const id = item.id;
const pid = item.pid;
itemMap[id] ??= {
...item,
children: itemMap[id]?.children??[]
}
const treeItem = itemMap[id];
if (pid === 0) {
result.push(treeItem);
} else {
itemMap[pid]?.children.push(treeItem)
}
}
return result;
}

arrayToTree(arr)
1
2
3
4
5
function arrayToTree1(pid,arr){
return arr.filter(item => item.pid===pid)
.map(item =>({...item, children: arrayToTree1(item.id,arr)}))
}
arrayToTree1(0,arr)