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

免费网站模板之家建筑工程管理局官网

免费网站模板之家,建筑工程管理局官网,wordpress阿里巴巴国际站,网站死循环1.树形数组扁平化 数组扁平化的方式很多,这里主要是用递归处理,除此之外还有正则、扩展运算符等等 const list [{name:1,id:1,children:[{name:11,id:11,children:[{name:111,id:111}]},{name:12},]},{name:2,id:2,children:[{name:21,id:21,children:…

1.树形数组扁平化

数组扁平化的方式很多,这里主要是用递归处理,除此之外还有正则、扩展运算符等等

    const list = [{name:'1',id:'1',children:[{name:'11',id:'11',children:[{name:'111',id:'111'}]},{name:'12'},]},{name:'2',id:'2',children:[{name:'21',id:'21',children:[{name:'221',id:'221'}]},{name:'22',id:'22'},]},]// 树形数组扁平化const test = (arr)=>{const list = []if(arr instanceof Array){for (let i = 0; i < arr.length; i++) {const item = arr[i];if(item.children && item.children.length>0){list.push(...test(item.children))//将每一层的结果push到list}delete item.children//视情况而定是否删除children属性list.push(item)}}return list}console.log(test(list,'扁平化'));

2.树形数组格式化(修改节点key值) 

使用for改变原数组的方式

    // 树形数组递归格式化数组:使用for(改变原数组)const format = (arr)=>{if(arr instanceof Array){for (let i = 0; i < arr.length; i++) {const ele = arr[i];ele.label = ele.name;ele.value = ele.id;delete ele.name;delete ele.id;if(ele.children && ele.children.length>0){format(ele.children);}}return arr}}

使用能生成新数组的方式:

    // 树形数组递归格式化数组:使用forEach(不改变原数组)const format2 = (arr)=>{if(arr instanceof Array){return  arr.map(item => {item.label = item.name;item.value = item.id;delete item.name;delete item.id;if(item.children && item.children.length>0){format2(item.children);}return item});}}

 3.获取树形数组中某个节点的所有父级节点

 这个方式需要熟悉函数在堆栈中的调用顺序才好理解否则理解起来有点绕

    const list = [{name:'1',id:'1',children:[{name:'11',id:'11',children:[{name:'111',id:'111'}]},{name:'12'},]},{name:'2',id:'2',children:[{name:'21',id:'21',children:[{name:'221',id:'221'}]},{name:'22',id:'22'},]},]
const getParentId = (arr,id)=>{for (let i = 0; i < arr.length; i++) {const item = arr[i]if(item.id==id){return [item]}if(item.children && item.children.length>0){let node = getParentId(item.children,id);//当当前item的有返回数组时则表示已经找到目标(id)节点item二级,node三级// node表示目标节点,而当前item则是第二次执行getParentId函数的item,因为第三次调用的getParentId函数在堆栈中被(return)去除掉了if(node!==undefined){return node.concat(item);//这里每return一次堆栈就会去除一次最顶层函数}}}}// js函数调用堆栈:js每执行一个函数就会往堆栈放一个函数,如果函数执行完或者return之后就会从堆栈剔除,堆栈遵循先进后出的顺序// 执行顺序:(每执行一次函数,往堆栈里面放一个函数)// 执行函数getParentId(),往堆栈里面放一个函数,// 第一遍代码执行到let node = getParentId(item.children,id)的时候,执行递归于是跳到函数getParentId的开头执行第二遍,再放一个函数在堆栈// 第二次执行到let node = getParentId(item.children,id)时候跟第一次一样继续执行递归函数getParentId,再放一个函数在堆栈// 第三次执行的时候item.id==id,于是return掉当前的函数,// 而当前是第三次执行的函数,return之后当前函数就从堆栈中去除了,堆栈只剩两个函数了(第一次执行的getParentId函数跟第二次执行getParentId函数)//  于是继续执行第二个getParentId,它不会从头开始而是从第二次递归后面那里(因为之前在这结束调转到函数开头的,所以继续从这里执行)开始执行,// 发现node!==undefined成立于是将第二个getParentId函数return掉,从堆栈中去除// 去除之后堆栈中只剩第一次执行的getParentId函数,此时不会从头开始执行,而是继续在第一次递归调用那里往后执行(因为之前在这结束调转到函数开头的,所以继续从这里执行),最终返回函数的结果

 

http://www.15wanjia.com/news/189121.html

相关文章:

  • 汕头做网站公司wordpress redis
  • 邯郸手机网站建设百度指数分析案例
  • 做家教需要什么哪个网站的会员广州网站优化工具服务
  • 扒下来的网站怎么做修改wordpress编辑器软件
  • 黄江镇网站建设公司wordpress如何设置商城
  • 东莞网站建设全过程idstore wordpress
  • 网站建设功能设计北京外贸营销网站建设费用
  • 石龙镇网站建设公司京东网页设计教程
  • 东莞网站推广策划活动黄骅港客运站电话号码
  • 学网站开发的培训学校重庆seo俱乐部
  • 电子商务网站的建设心得体会福泉市建设局网站
  • 哪些网站做任务可以赚钱全国新农村建设中心网站
  • 网站开发如何进行管理百度用户服务中心人工电话
  • 北京做网站费用虚拟主机专用控制面板
  • 购物网站建设市场调查论文怎么做app推广代理
  • 福建泉州做淘宝的拿货什么网站网站建设中数据字典
  • 做网站什么一级导航二级导航wordpress 登录用户名密码
  • 医院网络建设湖州seo排名
  • 某物流网站后台源码中国建设银行网站企业
  • 网站建设丨金手指排名15外贸建站哪家
  • 万网买的网站备案搭建一个商城需要多少钱
  • 网站首页的布局设计学网站建设有用吗
  • 手机上哪个网站学校网站的作用和意义
  • 昆山网站建设公司苏州爬虫科技基金网站建设需求书
  • 泰州做网站哪家好中铁建设集团有限公司官网
  • 网站开发者工作描述地方网站模板
  • 如何做英文网站怎样免费做彩票网站
  • 百度推广需要先做网站吗百度一下的网址
  • 网站空间管理平台网站简繁转换
  • wordpress 手机 自建站同学会网站建设方案