JavaScript:list和tree转换

将树形数组转换成扁平数组:

// 将树形数组转换成扁平数组
      treeToList(tree) {
        let data = JSON.parse(JSON.stringify(tree))
        let newData = []
        const callback = (item) => {
          (item.children || (item.children = [])).map(v => {
            callback(v)
          })
          delete item.children
          newData.push(item)
        }
        data.map(v => callback(v))
        return newData
      },

把扁平数组转换成树形数组:

// 把数组转换成tree
      listToTree(data) {
        // * 先生成parent建立父子关系
        const obj = {};
        data.forEach((item) => {
          obj[item.id] = item;
        });
        // * obj -> {1001: {id: 1001, parentId: 0, name: 'AA'}, 1002: {...}}
        // console.log(obj, "obj")
        const parentList = [];
        data.forEach((item) => {
          const parent = obj[item.pid];
          if (parent) {
            // * 当前项有父节点
            parent.children = parent.children || [];
            parent.children.push(item);
          } else {
            // * 当前项没有父节点 -> 顶层
            parentList.push(item);
          }
        });
        return parentList;
      },

网上找了好多把list和tree转换的方法,以上两个方法亲测有效。

参考文章:

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值