美文网首页
JavaScript - 递归:将平级结构转为树状结构

JavaScript - 递归:将平级结构转为树状结构

作者: 金药 | 来源:发表于2023-02-22 15:14 被阅读0次

原始数据

        let oldArr = [
            { id: '1000', pid: null, name: '西安总部' }, // 1级
            { id: '10001', pid: '1000', name: '西安雁塔分部 - 子公司' }, // 2级
            { id: '10002', pid: '1000', name: '西安莲湖分部 - 子公司' }, // 2级
            { id: '100021', pid: '10002', name: '西安莲湖分部 - 西桃园分部 - 子公司' }, // 3级
            { id: '2000', pid: null, name: '北京总部' }, // 1级
            { id: '20001', pid: '2000', name: '北京丰台分部 - 子公司' }, // 2级
            { id: '20002', pid: '2000', name: '北京朝阳分部 - 子公司' }, // 2级
            { id: '200021', pid: '20002', name: '北京朝阳分部 - 广渠路分部 - 子公司' } // 3级
        ]

需要转化的样子


image.png
 <div>{this.gongsi()}</div>
    gongsi = () => {
        let oldArr = [
            { id: '1000', pid: null, name: '西安总部' }, // 1级
            { id: '10001', pid: '1000', name: '西安雁塔分部 - 子公司' }, // 2级
            { id: '10002', pid: '1000', name: '西安莲湖分部 - 子公司' }, // 2级
            { id: '100021', pid: '10002', name: '西安莲湖分部 - 西桃园分部 - 子公司' }, // 3级
            { id: '2000', pid: null, name: '北京总部' }, // 1级
            { id: '20001', pid: '2000', name: '北京丰台分部 - 子公司' }, // 2级
            { id: '20002', pid: '2000', name: '北京朝阳分部 - 子公司' }, // 2级
            { id: '200021', pid: '20002', name: '北京朝阳分部 - 广渠路分部 - 子公司' } // 3级
        ]
        let newArr = []
        this.treeS(oldArr,null,newArr)
    }

    treeS = (oldArr,id,newArr) => {
        oldArr.forEach((i)=>{
            if(i.pid == id) { newArr.push(i)}
        })
        console.log(newArr,'一级');
        newArr.forEach((item)=> {
            item.children = []
            console.log(newArr,'newArr');
            this.treeS(oldArr,item.id, item.children)
        })
        console.log(newArr,'后面级别');
    }

1.第一步遍历老数组将一级节点先筛选出来得到一个新数组
2.第二步给新数组遍历加children,进行递归
(第一次调用递归函数传老数组,id为null,新数组为空)
(第二次调用递归函数传老数组,id为新数组每一个id,新数组为每一个新加的children项)
(每次递归都会判断当前传入的id是不是和他上一级id一致,是就push进他传入的新数组)

相关文章

网友评论

      本文标题:JavaScript - 递归:将平级结构转为树状结构

      本文链接:https://www.haomeiwen.com/subject/mmyakdtx.html