list转为tree

 准备一个list的数组

        数组中每一个元素添加一个parentId的属性

        根据和这个属性我们找到父数据进行一一添加

         let arr = [
            {
                id: 1,
                parentId: 0,
                name: 'Saber',
            },
            {
                id: 2,
                parentId: 0,
                name: 'Lancer'
            },
            {
                id: 3,
                parentId: 0,
                name: 'Archer',
            },
            {
                id: 4,
                parentId: 1,
                name: '阿尔托莉雅'
            },
            {
                id: 5,
                parentId: 1,
                name: '尼禄'
            },
            {
                id: 6,
                parentId: 2,
                name: '库丘林'
            },
            {
                id: 7,
                parentId: 3,
                name: '红A',
            },
            {
                id: 8,
                parentId: 3,
                name: '金闪闪'
            }
        ]

 转化的代码

   // 遍历arr中每一个元素- 
   // 找这个元素的 父亲(v.id === parentId)
      function listToTree(arr) {
          let resArr = []
          arr.forEach(v => {
             // 找这个元素的 父亲(item.id === v.parentId)
             // 去arr中 中 找v的父亲,找到的话,把v添加到父亲的children属性中
             let parentNode = arr.find(item => item.id == v.parentId);
                if (parentNode) {
                    // 如果没有找到父亲-说明 他是一级目录
                    if (parentNode['children']) {
                        parentNode['children'].push(v);
                    } else {
                        parentNode['children'] = [v];
                    }
                } else {
                    //说明这个v 没有父亲
                    resArr.push(v)
                }
            });
            return resArr;
        }
        console.log(listToTree(arr));

打印出来的格式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值