安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

js中平级数组和树形结构数据相互转换

8月24日 相见欢投稿
  在实际的工作和业务需求中,我们经常会碰到树形数据结构,比如公司组织架构、组织层级、省市县或者事物的分类等等数据。那么在JavaScript中如何将数组转为树形结构和树形结构转为数组,本文就详细的来探究一下。
  先来看看给出了一组怎样的数据,转换为怎样的树形结构。
  后台接口返回或者面试官给你的数据:constlist〔{id:1,name:部门1,pid:0},{id:2,name:部门11,pid:1},{id:3,name:部门12,pid:1},{id:4,name:部门111,pid:2},{id:5,name:部门121,pid:3},{id:6,name:部门2,pid:0},{id:7,name:部门21,pid:6},{id:8,name:部门3,pid:0},〕
  期望的处理后的数据:constlistTree〔{id:1,name:部门1,pid:0,children:〔{id:2,name:部门11,pid:1,children:〔{id:4,name:部门111,pid:2,children:〔〕}〕},{id:3,name:部门12,pid:1,children:〔{id:5,name:部门121,pid:3,children:〔〕}〕}〕},{id:6,name:部门2,pid:0,children:〔{id:7,name:部门21,pid:6,children:〔〕}〕},{id:8,name:部门3,pid:0,children:〔〕}〕
  一、数组转换为树形结构
  如果后台给了一个这样的数据说让前端自己去转换为树形结构或者面试官给你一组这样的数据让你手写一个转换方法,你会怎么处理?
  1、递归实现递归查找获取子节点constgetChild(list,result,pid){for(constitemoflist){if(item。pidpid){constnewItem{。。。item,children:〔〕};result。push(newItem);getChild(list,newItem。children,item。id);}}}调用递归实现constlistToTree(list,pid){constresult〔〕;getChild(list,result,pid);}listToTree(list,0)
  2、Map对象实现constlistToTree(list){最终树形结构输出的结果constresult〔〕;constitemMap{};for(constitemoflist){constiditem。constpiditem。if(!itemMap〔id〕){itemMap〔id〕{children:〔〕,};}itemMap〔id〕{。。。item,children:itemMap〔id〕〔children〕,};consttreeItemitemMap〔id〕;if(pid0){result。push(treeItem)}else{if(!itemMap〔pid〕){itemMap〔pid〕{children:〔〕}}itemMap〔pid〕。children。push(treeItem);}}}listToTree(list,0)
  3、filter实现
  这种方法很有意思,可能大多数人想不到,也是从大佬处学到的(读书人的是怎么能叫抄呢,应该叫窃)。constlistToTree(list,key){consttreelist。filter(function(parent){返回每一项得的子级数据constbranchArrlist。filter((child)parent。idchild〔key〕);parent。children〔〕;如果存在子级,则给父级添加一个children属性并赋值if(branchArr。length0){parent。childrenbranchA}返回第一层returnparent〔key〕0;});}传入原始数据和父级pid的keylistToTree(list,pid)
  二、树形结构转换为数组
  1、reduce取树行数据的所有子集functiontreeTransList(tree,key){returntree。reduce(function(con,item){varcalleearguments。con。push(item);if(item〔key〕item〔key〕。length0)item〔key〕。reduce(callee,con);},〔〕)。map(function(item){item〔key〕〔〕;})}treeTransList(listTree,children)
  2、递归实现functiongetItem(tree,result){for(leti0;itree。i){if(tree〔i〕。children){getItem(tree〔i〕。children,result)deletetree〔i〕。}result。push(tree〔i〕)}}functiontreeToList(tree){constresult〔〕;getItem(tree,result);}treeToList(listTree)
  3、广度优先遍历法functiontreeToList(tree,childNamechildren){设置临时数组,用来存放队列letqueen〔〕;设置输出数组,用来存放要输出的一维数组constresult〔〕;queenqueen。concat(tree);对树对象进行广度优先的遍历while(queen。length){constfirstqueen。shift();if(first〔childName〕){queenqueen。concat(first〔childName〕);deletefirst〔childName〕}result。push(first);}}treeToList(listTree,children)
投诉 评论 转载

澳大利亚研究方脸比鸭蛋脸看起来更具攻击性,方脸年轻男性攻击性【环球时报综合报道】脸型如何影响别人对你的看法?据英国《每日邮报》4日报道,澳大利亚新南威尔士大学研究人员近期研究发现,方脸比鸭蛋脸看起来更具攻击性,特别是方脸的年轻男性看起来……探访苹果最神秘的设计团队果粉之家,专业苹果手机技术研究十年!您身边的苹果专家一直以来,苹果公司都以保密文化著称,不仅ApplePark的办公场所不允许外界拍照,同时还与大多数苹果员工签署了保密协……手把手教你调用微信扫一扫!三分钟包会这是我第一次公众号开发,本以为看着微信官方文档直接复制粘贴就好了,没想到是我天真了,爬过一个坑又入一个坑!就这么一个简单的事,竟然搞了一下午,所以写了这篇文章,希望可以帮到大家……js中平级数组和树形结构数据相互转换在实际的工作和业务需求中,我们经常会碰到树形数据结构,比如公司组织架构、组织层级、省市县或者事物的分类等等数据。那么在JavaScript中如何将数组转为树形结构和树形结构转为……彻底抛弃幻想!华为正式开启官翻二手机业务100原厂鸿蒙OS系【11月24日讯】相信大家都知道,自从遭受到芯片危机以后,华为手机业务就彻底折戟了,就连华为Nova系列、麦芒系列、畅享系列等机型都被出售给国内三大运营商以及其他国资企业,甚至……VC液冷散热红米K40S发布,红米K40惊现大米价改写发烧史总结来看2022年的最佳选择红米K40S新手机在骁龙870处理器功耗已经非常稳的情况下,总结来看2022年的最佳选择红米K40S新手机还增加了VC液冷散热系统,总结来看2022……从一穷二白到全球第一,京东方是怎么实现逆袭的?今年北京冬奥会的开幕式上,最受瞩目的可能就是那雪花形主火炬台,其采用96块小雪花形态和6块橄榄枝形态的LED双面屏组成,内有55万余颗LED灯珠,每一颗灯珠都由驱动芯片的单一信……iPhoneSE3通过认证A15处理器支持5G三月发布【PChome手机频道报道】多个新型号苹果设备通过了俄罗斯EEC监管机构的认证,这些设备被认为是苹果即将在3月春季发布会中所推出的新品。其中型号为A2595、A2783和A27……抖音电商促进农货产销对接,受邀参加全国精准扶贫典型案例研讨会9月28日,全国精准扶贫典型案例成果转化第五次视频研讨会召开。该研讨会以借鉴电商扶贫经验,解决农产品销售难,促脱贫户增收不返贫为交流方向,为下一步巩固脱贫成果、助力乡村振兴提供……外媒续航实测iPhone13ProMax进步显著,安卓这款机作为苹果的最新年度旗舰,iPhone13系列从即将发布到已发布,受到的关注度一直都是有增无减。而此次iPhone13系列最明显的升级点,除了A15芯片以外,就是把屏幕刷新率提到……60岁老人凌晨三点王者五杀?腾讯回应央视网消息:9月9日,腾讯成长守护平台微博发布公告就网传图片60岁老人凌晨三点排位一事作出回应,称经过近3天的筛查比对,最后成功锁定到1个游戏账号。从技术手段和实际验证结论来看……?思MindSpore蛋白质结构预测模型全球竞赛第一中国经济网北京4月22日讯(记者王惠绵)华为全场景AI框架?思MindSpore开源已有两年,通过架构创新,已经大幅提高了开发效率和科学计算性能。近日,基于全场景AI框架?思M……
苹果将在9月15号举办秋季发布会,推出iPhone13等新设财付通小贷再次换帅,微信分付仍未大规模开放GitHub好玩的项目之你想要的样子我都有谁能帮忙推荐几款无代码开发软件?C自学循环未来电商或不再热门?新购物模式已在全国兴起打造家庭巨幕私人影院TCL98ampamp39ampamp3vivoS10系列官宣线下爆款来了!柔光人像1亿像素,7月15G手机是真好用还是智商税?8年扩产20倍,特斯拉打算怎么干?618骁龙870机型参数大对比鸿蒙2。0新版本有300MB建议升级,鸿蒙3。0已在路上

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利