首页 > 编程知识 正文

js遍历树形结构数组(JS数据转换 —— 树形结构和平铺结构的转换)

时间:2023-05-03 12:44:56 阅读:123415 作者:4855

文章目录树结构与分片结构的转换1 .前言2 .正向-分片结构移动3 .反向-分片结构移动4 .总结

木结构与瓷砖结构的变换1 .前言

无论是实际业务还是面试,博主都遇到了这样的需求。

将一个树结构的数据变换为瓷砖的排列,或者将瓷砖的数量组合变换为树结构,所以在此记录下如何实现该变换的思想。

假设有以下数据: 其中,tree是从外到内分层结构树结构的数据。 arr是树结构的数组分片,pid指向树结构上一级的id值。

const tree=[{ id: 1,name: '北京',children: [{ id: 11,name: '朝阳',children3360,namme name { id: 12,name: '海淀',children: [{ id: 121,name: '海淀1号' },{ id: 2,name3360 '上海',chhche children: [{ id: 211,name: '浦东1号' }],{ id: 22,name: '虹口',children 3360 [ { id 3360 } } const arr={ pid: 11,id: 11,name3360 '朝阳' },{ pid: 11,id: 1 name: '朝阳1号' },{ pid: 1,id: 12,name3360 name: '海淀1号' },{ pid: 1 name: '上海' },{ pid: 2,id: 21,name: '浦东' },{ pid: 21,id: 211 {PID:} name: '虹口' }、{ pid: 22、id: 221、name: '虹口1号' }实现了两种方法,使这两种数据可以相互转换。

2 .正向-平铺树结构//正向-平铺树结构//从外向内依次递归,如果有children,则返回functiontreetoarr (数据,PID=空,res=[] )数据==0) treetoarr(item.Children,item.id,res ); (); 返回RES; (; constarr=treetoarr (数据; 控制台. log (arr; 3 .反向-按顺序找到与分片结构树//数组中的每个级别对应的元素,同时用pid找到与每个元素的children属性对应的value,递归地找到functionarrtotree(arr,pid=null ) arr.foreach (item={ if (item.PID===PID ) /由于每次都需要遍历整个数组,因此时间复杂度为n*n///constchildren=arrtotree==pid (,item.id ); if(children }.Length ) RES.push )…item,children ) } else (RES.push )…item ) }; 返回RES; (; 常数树=arrtotree (arr; 控制台. log (JSON.stringify (tree,null,2 ); 4 .总结解决办法

主要利用递归,正向-树形旋转瓷砖由外向内递归; 反向-分片结构的生成树从内到外递归。

其他方法

首先,所有递归都可以通过迭代来实现。 (因为递归是对函数栈的调用,所以可以使用栈来实现迭代,博客一时一点也做不到,手动很尴尬。) )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。