function toTree(arr) {
// newArr用于存放转化成的树
let newArr = []
// 作为数据字典,用于方便查询找到某一项的父级项
let map = {}
// 制作数据字典
arr.forEach(item => {
// 如果当前项没有children,就添加该属性,方便转树使用
if (!item.children) {
item.children = []
}
// 把当前项的ID作为数据字典的索引,保存当前项
map[item.id] = item
})
arr.forEach(item => {
// 通过数据字典找到当前项的父级项
let parent = map[item.pid]
// 如果当前项有父级
if (parent) {
// 将当前项插入到它的父级项的children中
// 注:由于parent的地址和arr的数据项地址相同,所以该插入操作相当于直接在arr中找到item的父级项,然后把item插入到它的父级项中
parent.children.push('item')
} else {
// 如果没有父级项,则直接插入到新数组
newArr.push(item)
}
})
return newArr
}
数组转树
最新推荐文章于 2021-09-20 15:05:36 发布