将扁平数据,转为树形数据,递归处理

代码如下:
  <script>
        // 需求:将扁平数据转为树形结构
      const list = [
        { id: 1, name: "广东", pid: 0 },
        { id: 11, name: "深圳", pid: 1 },
        { id: 12, name: "东莞", pid: 1 },
        { id: 2, name: "湖南", pid: 0 },
        { id: 21, name: "长沙", pid: 2 },
        { id: 22, name: "岳阳", pid: 2 },
      ];
      function ArrTree(list,pid){
        // 定义新数组用来存储树形数据
        const newArr = []
        list.forEach(v => {
            // 循环遍历时判断数组每一项的pid是否等于传进来的pid
            if(v.pid===pid){
                newArr.push(v)
                // 再次调用函数,并接收返回的数据,依然传入两个参数,数组和筛选出来的每一项id,省份的pid根市的id是相等的
                const children =  ArrTree(list,v.id)
                if(children.length){
                    // 将第二次/第三次...的数据添加到children子对象中
                    newArr[newArr.length-1].children = children
                }
            }
        });
        // 返回数据
        return newArr
      }
    //   第一次给函数设置两个参数,数组、因为所有省份的pid都是0设置默认参数
      console.log(ArrTree(list,0));
    </script>
处理完如图:
posted @ 2022-12-06 23:39  MetX  阅读(58)  评论(0编辑  收藏  举报