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 就是我们要使用到的树状结构的集合