记一个数组转Tree的思路

719 阅读1分钟

导航菜单需要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))

打印结果如下:

arrToTree打印结果