let arr = [
{
id: "4",
name: "张三",
pid: "2"
},
{
id: "5",
name: "李四",
pid: "2"
},
{
id: "6",
name: "王五",
pid: "5"
},
{
id: "7",
name: "赵六",
pid: "3"
},
{
id: "8",
name: "孙七",
pid: "3"
},
]
function arrToTree(data) {
let result = []
let map = {}
// 第一次类似浅拷贝赋值 两次浅拷贝导致 data和map相互影响
data.forEach(item => {
map[item.id] = item
})
data.forEach(item => {
// 这儿需要注意 item 的父级 是 map[item.pid]
// 第二次类似浅拷贝赋值
let parent = map[item.pid]
if (!parent) {
result.push(map[item.id]) // 直接item也可以
return
}
// 表示这个项存在父级
// 即使原来的父级还没有创建,由于浅拷贝 data和map上的数据还是会收到影响
(parent.children || (parent.children = [])).push(item)
})
return result
}
console.log(arrToTree(arr));
一维数组转多维数组
于 2022-11-03 20:47:29 首次发布