导航菜单需要Tree结构数据,后端返回的是对象数组,对象有id,Pid,这就需要做一些转换工作 代码如下:
function arrToTree(arr) {
let tempObj = {}
let result = []
//构造一个对象,该对象的key是所有节点的id,value是对应节点
for (let i = 0, l = arr.length; i < l; i++) {
tempObj[arr[i].id] = arr[i]
}
//
//遍历 寻找父节点
for (let i = 0, l = arr.length; i < l; i++) {
//pNode 父节点
let pNode = tempObj[arr[i].Pid]
//父节点存在
if (pNode) {
if (!pNode.children) {
pNode.children = []
pNode.children.push(arr[i])
} else {
pNode.children.push(arr[i])
}
}
//不存在父节点 直接推入result 一级菜单
else {
result.push(arr[i])
}
}
return result
}
let arrData = [{ id: 0, Pid: null }, { id: 1, Pid: 0 }, { id: 2, Pid: 0 }, { id: 3, Pid: 1 }]
console.log(arrToTree(arrData))
打印结果如下: