数组转树的递归实现:
let data = [
{ 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 }
]
/*data 初始数组, result = [], pid 父id*/
const getChildren = (data, result, pid) => {
data.forEach(item => {
if (item.pid == pid) {
const children = { ...item, children: [] }
result.push(children)
getChildren(data, children.children, item.id)
}
})
}
const arrayToTree = (arr, pid) => {
const result = []
getChildren(arr, result, pid)
return result
}
let result = arrayToTree(data, 0)
结果:
[{
"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": []
}]
}]
}]
}]