扁平化数据,parentId为null的为根节点
let flatData = [{id:1,parentId:null,name:'广东'},{id:2, parentId:1,name:'广州'},{id:3,parentId:1,name:'深圳'},{id:4,parentId:2,name:'天河区'},{id:5,parentId:3,name:'南山区'}]
思路:把数据转换成对象区存储,之后遍历的同时借助对象的引用,直接从对象中找对应的数据做存储
方法:
function transformTree(arr) {
let map = {}
let rootTree
for(let item of arr) {
map[item.id] = item
item.children = []
if(!item.parentId) {
rootTree = item
}
}
for(let item of arr) {
if(item.parentId) {
map[item.parentId].children.push(item)
}
}
return rootTree
}
结果: