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

珠海网站设计多少钱天津建站网

珠海网站设计多少钱,天津建站网,叮当设计app官方下载,做网站 兼职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.rdtb.cn/news/19931.html

相关文章:

  • 机械类网站如何做网站优化bt磁力搜索
  • 做一个响应式网站价格优化推广
  • 网站建设进无形资产的规定海口关键词优化报价
  • 自己制作手机app软件崇左seo
  • 专业做网站多少钱app开发自学
  • 平顶山企业网站建设怎样在百度上发布自己的文章
  • 手机互动网站建设百度入口网页版
  • 建设网站网络公司app推广刷量
  • 做招聘网站的怎么引流求职者全网引流推广
  • 网站微信认证费用seo运营是做什么的
  • WordPress建站收费湖南网站seo推广
  • 网站开发 方案 报价可口可乐软文营销案例
  • java做的网站php百度搜索引擎营销
  • 广州购物网站开发网络媒体推广报价
  • 网站建设要求 牛商网自己建网站详细流程
  • 做一元夺宝网站需要什么条件广州商务网站建设
  • php动态网站开发实训报告希爱力跟万艾可哪个猛
  • 公司如何做网站东莞搜索引擎推广
  • 推百拉搜索引擎排名优化技术
  • 网站流量指数百度识图 上传图片
  • 个人制作网站工具最新网络营销方式
  • 怎么申请公司网址seo关键词优化外包公司
  • 做微商做什么网站比较好seo咨询师招聘
  • 网站代理怎么做推广下载app拿佣金
  • 公司想推广做网站有用手机怎么建立网站
  • 做坑网站需要官方推广平台
  • 专门做隐形眼镜的网站网站免费发布与推广
  • 做招聘网站需要什么资质百度推广怎么做效果好
  • 现在最流行的网站开发工具aso100官网
  • 山东三强建设咨询有限公司网站百度推广优化技巧