将平铺的数组变成树结构 避免多次循环嵌套 避免递归 new Map()使用知多少
创始人
2024-11-14 21:06:45

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

上一篇:数据库相关

下一篇:区块链之智能合约

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...