let data = [{
id: 1, name: '张三', parentId: 0
}, {
id: 2, name: '李四', parentId: 0
}, {
id: 3, name: '张三111', parentId: 1
}, {
id: 4, name: '张三222', parentId: 1
}, {
id: 5, name: '李四111', parentId: 2
}]
/** 转换为
[{
id: 1,
name: '张三',
parentId: 0,
children: [{
id: 3, name: '张三111', parentId: 1
}, {
id: 4, name: '张三222', parentId: 1
}]
}, {
id: 2,
name: '李四',
parentId: 0,
children: [{
id: 5, name: '李四111', parentId: 2
}]
}]
*/
1. 循环遍历
let ids = {}
data.forEach(item => {
if(item.parentId) return
ids[item.id] = item
ids[item.id].children = []
})
data.forEach(item => {
const pid = item.parentId;
if(Object.keys(ids).includes(pid .toString())) {
ids[pid ].children.push(item)
}
})
Object.values(ids)
2. 递归
function arrayToTree(list, root) {
return list.filter(v => {
return v.parentId === root
}).map(item => {
item.children = arrayToTree(list, item.id)
return item
})
}
arrayToTree(data, 0)