关于前端树形数据结构的处理 需要吧上面的数据处理成下面的数据
let arr = [
{id:'1',name:'一级',childrenList:[
{id:'2',name:'二级',childrenList:[
{id:'3',name:'三级',childrenList:[]},
]}
]},
{id:'1',name:'一级',childrenList:[
{id:'2',name:'二级',childrenList:[
{id:'4',name:'三级2-22',childrenList:[]},
]}
]},
{id:'1',name:'一级',childrenList:[
{id:'5',name:'二级-2',childrenList:[
{id:'6',name:'二级2-22',childrenList:[]},
]}
]},
{id:'1',name:'一级',childrenList:[
{id:'7',name:'二级-3',childrenList:[]}
]},
]
let arr1 = [
{
id:'1',
name:'一级',
childrenList:[
{
id:'2',name:'二级',childrenList:[
{
id:'3',name:'三级',childrenList:[]
},
{
id:'4',name:'三级2-22',childrenList:[]
}
]
},
{
id:'5',name:'二级-2',childrenList:[
{id:'6',name:'二级2-22',childrenList:[]},
]
},
{
id:'5',name:'二级-3',childrenList:[]
}
]
}
]
function walkList(list) {
let parentIdMap = {}
function walk(arr, parentId = -1) {
arr.map(item => {
let { id, childrenList, ...rest } = item
parentIdMap[parentId] = parentIdMap[parentId] || {}
Object.assign(parentIdMap[parentId], {
[id]: {
id,
...rest
}
})
walk(childrenList, id)
})
}
walk(list)
return parentIdMap
}
function transform2List(parentIdMap) {
let outer = parentIdMap['-1']
let list = []
Object.values(outer).map(item => {
list.push({
...item,
childrenList: getChildren(item.id, parentIdMap)
})
})
function getChildren(id, map) {
if (!map[id]) {
return []
}
return Object.values(map[id]).map(item => {
return {
...item,
childrenList: getChildren(item.id, map)
}
})
}
return list
}
transform2List(walkList(arr))
这样的数据是不行的,要加一个pid。pid 是 父级的id 。只有id没法转换。先转成一维数组,再转成树形结构