当前位置: 首页 > news >正文

重庆航运建设发展有限公司网站/seo服务加盟

重庆航运建设发展有限公司网站,seo服务加盟,网站html地图模板,重庆建设网站公司哪家好文章目录树形结构和平铺结构的转换1. 前言2. 正向-树形结构转平铺3. 逆向-平铺结构转树形4. 总结树形结构和平铺结构的转换 1. 前言 不论是在实际的业务还是在面试中,博主都遇到了这样的一个需求。 将一个树形结构的数据转换成平铺的数组,或者将平铺的…

文章目录

  • 树形结构和平铺结构的转换
    • 1. 前言
    • 2. 正向-树形结构转平铺
    • 3. 逆向-平铺结构转树形
    • 4. 总结

树形结构和平铺结构的转换

1. 前言

不论是在实际的业务还是在面试中,博主都遇到了这样的一个需求。

将一个树形结构的数据转换成平铺的数组,或者将平铺的数组装换成树形结构,因此在这里记录一下如何实现这种转换的思想。

假设存在以下数据,其中 tree 是一个树形结构的数据,从外到内层级结构;arr 是树形结构的数组平铺,其中 pid 指在树形结构中上一层级的 id 值。

const tree = [{id: 1,name: '北京',children: [{id: 11,name: '朝阳',children: [{ id: 111, name: '朝阳1号' }]}, {id: 12,name: '海淀',children: [{ id: 121, name: '海淀1号' }]}]
},{id: 2,name: '上海',children: [{id: 21,name: '浦东',children: [{ id: 211, name: '浦东1号' }]},{id: 22,name: '虹口',children: [{ id: 221, name: '虹口1号' }]}]
}];
const arr = [{ pid: null, id: 1, name: '北京' },{ pid: 1, id: 11, name: '朝阳' },{ pid: 11, id: 111, name: '朝阳1号' },{ pid: 1, id: 12, name: '海淀' },{ pid: 12, id: 121, name: '海淀1号' },{ pid: null, id: 2, name: '上海' },{ pid: 2, id: 21, name: '浦东' },{ pid: 21, id: 211, name: '浦东1号' },{ pid: 2, id: 22, name: '虹口' },{ pid: 22, id: 221, name: '虹口1号' }
]

实现两个方法,让这两种数据可相互转换。

2. 正向-树形结构转平铺

// 正向-树形结构转平铺
// 从外到内依次递归,有 children 则继续递归
function treeToArr(data, pid=null, res=[]) {data.forEach(item => {res.push({ pid: pid, id: item.id, name: item.name });if(item.children && item.children.length !== 0) {treeToArr(item.children, item.id, res);}});return res;
};const arr = treeToArr(data);
console.log(arr);

3. 逆向-平铺结构转树形

// 依次在数组中找到每一层级对应的元素,同时每个元素的 children 属性对应的 value 通过 pid 去找到,然后递归执行下去
function arrToTree(arr, pid=null) {const res = [];arr.forEach(item => {if(item.pid === pid) {// 这样每次都需要遍历整个数组,因此时间复杂度为 n*n// const children = arrToTree(arr, item.id)   // 往下递归时,每次数组的大小都在减小,每次都筛选掉父代元素,最终的时间复杂度为 n*lognconst children = arrToTree(arr.filter(v => v.pid !== pid), item.id);if(children.length) {res.push({ ...item, children })}else {res.push({ ...item })}}});return res;
};const tree = arrToTree(arr);
console.log(JSON.stringify(tree, null, 2));

4. 总结

  1. 解决思路

    主要利用递归,正向-树形转平铺由外向内递归;逆向-平铺结构转树形由内向外递归。

  2. 其它方法

    1. 首先,所有的递归都能通过迭代来实现(递归就是函数栈的调用,因此使用栈可实现迭代,博主暂时有点儿不会,手动尴尬)
http://www.lbrq.cn/news/1076167.html

相关文章:

  • 做网站划算还是做app划算/百度推广开户代理商
  • 做黄图网站接广告好赚吗/网络营销方式与工具有哪些
  • 代运营网站建设/营销策划方案1000例
  • 深圳做营销网站公司简介/seo优化厂商
  • 响应式网站建设服务/软文广告500字
  • 辽宁城乡建设集团网站/在哪买网站链接
  • 芜湖网站建设工作室/app运营方案策划
  • 用阿里云服务器做自己购物网站/网站的营销推广
  • wordpress备份网站/广东的seo产品推广服务公司
  • 合肥做企业网站/seo推广需要多少钱
  • 网站建设出现乱码/搜索引擎优化的方法有哪些?
  • 网站建设卩金手指科杰/seo网站推广怎么做
  • 建设网站要先给钱才能做/日本进口yamawa
  • 饮品网页设计图片/合肥seo培训
  • 免费网站的软件下载/谷歌浏览器2021最新版
  • 如何做网站活动/志鸿优化网官网
  • 如何搭建自己的网站服务器地址/口碑营销的作用
  • 什么网站可以接模具做/软件推广赚钱一个10元
  • 集美建设局中心网站/培训方案模板
  • 郑州网站设计收费低/晚上国网app
  • wordpress手机图片站/seo标签怎么优化
  • 深圳做网站电话/网络优化包括
  • 枣庄建设局网站/提高搜索引擎排名
  • 品牌网站建设价位/重庆优化seo
  • 做婚纱网站的步骤/武汉最新消息今天
  • 驻马店做网站建设的公司/河北百度seo关键词
  • 龙游县建设局网站/免费发布友链
  • 深圳网站开发费用/重庆关键词自然排名
  • 聊天软件怎么做/英文seo
  • 网站做淘宝客/东莞seo网络培训
  • rag学习-以项目为基础快速启动掌握rag
  • [Linux入门] Ubuntu 系统中 iptables 的配置与使用
  • 轻量级鼠标右键增强工具 MousePlus
  • 8.2-使用字符串存储 UTF-8 编码文本
  • 【科普】在STM32中有哪些定时器?
  • Spark的宽窄依赖