js算法-两种将数组数据转为树结构记录

这篇博客介绍了如何使用JavaScript将一个包含父级ID的数组转换为树形结构的数据。主要涉及两个函数:`listToTree` 和 `transTree`,它们分别通过不同的方式处理数据,构建具有层级关系的对象。`listToTree` 通过遍历和过滤操作实现,而 `transTree` 则利用映射关系快速构造树形结构。这些方法对于处理层级数据和构建前端树状组件非常有用。
摘要由CSDN通过智能技术生成
let arr = [
      ];
      /* function listToTree(oldArr) {
        oldArr.forEach((element) => {
          let parentId = element.parentId;
          if (parentId !== 0) {
            oldArr.forEach((ele) => {
              if (ele.id == parentId) {
                //当内层循环的ID== 外层循环的parendId时,(说明有children),需要往该内层id里建个children并push对应的数组;
                if (!ele.children) {
                  ele.children = [];
                }
                ele.children.push(element);
              }
            });
          }
        });
        // console.log(oldArr); //此时的数组是在原基础上补充了children;
        oldArr = oldArr.filter((ele) => ele.parentId === 0); //这一步是过滤,按树展开,将多余的数组剔除;
        // console.log(oldArr);
        return oldArr;
      }
       */
      function transTree(data) {
        let result = [];
        let map = {};
        if (!Array.isArray(data)) {
          //验证data是不是数组类型
          return [];
        }
        data.forEach((item) => {
          //建立每个数组元素id和该对象的关系
          map[item.id] = item; //这里可以理解为浅拷贝,共享引用
        });
        data.forEach((item) => {
          let parent = map[item.parentId]; //找到data中每一项item的爸爸
          if (parent) {
            //说明元素有爸爸,把元素放在爸爸的children下面
            (parent.children || (parent.children = [])).push(item);
          } else {
            //说明元素没有爸爸,是根节点,把节点push到最终结果中
            result.push(item); //item是对象的引用
          }
        });
        return result; //数组里的对象和data是共享的
      }
      console.log(transTree(arr));

参考:https://www.jianshu.com/p/bbdc8178a2dc

https://www.jb51.net/article/167897.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值