阅读量:0
背景
偶然看到一个需求就是需要将一个平铺的树状结构,通过特定的字段要求改变成树状结构,然后最开始的想法就是循环套循环,就是通过递归来,这次尝试着用了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 就是我们要使用到的树状结构的集合