实现思路
- 使用map 键值对方式存储所有扁平数据(好处是方便后续查找 - 直接通过键名就能快速定位到对象)
- 通过数据引用关系来组成tree
代码实现
let 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 reduceTree (list) {
const dataMap = {}
const result = []
list.forEach(item => {
dataMap[item.id] = item
})
data.forEach(item => {
const father = dataMap[item.pid]
if(father) {
(father.children || (father.children = [])).push(father)
} else {
result.push(item)
}
})
}