将平铺的数组变成树结构 避免多次循环嵌套 避免递归 new Map()使用知多少

avatar
作者
筋斗云
阅读量:0

Set 和 Map 数据结构

背景

偶然看到一个需求就是需要将一个平铺的树状结构,通过特定的字段要求改变成树状结构,然后最开始的想法就是循环套循环,就是通过递归来,这次尝试着用了map来实现

前提

一个由多个对象组成的数组结构, 每个都有字段 parentId ,id
当这个对象的parentId为0的时候则为第一级 当这个对象的parentId等于另外一个对象id的时候就表明 这个对象是那个对象的子集,并且存放在subs中, 这个subs是原始对象中没有的key

实现

// 假如有个list // 首先将这个list转换成map格式                 const map = new Map();                 for (let i = 0; i < data.length; i++) {                     map.set(data[i].id, data[i]);                 } // 定义一个数组(最终需要使用到的树结构的数组)                 const dataList = [];                 const _this = this;                 list.forEach(item => {                     if (item.parentId  === 0) {                         dataList.push(item);                     } else {                         const upperObj = map.get(item.parentId);                         if (upperObj) {                             if (!upperObj.subs) {                                 _this.$set(upperObj, 'subs', []);                             }                             upperObj.subs.push(item);                         }                     }                 }); // 最终得到的 dataList 就是我们要使用到的树状结构的集合 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!