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

关于递归处理,应该怎么处理,思路是什么?

在这里插入图片描述
其实问题很简单,就是想要循环遍历整个data对象,来实现所有name转成label,但是想到里面还有children属性,整个children里面可能还会嵌套很多很多的name,如此循环,很难搞,知道使用递归,但却无从下手。

let data = {name: 'a', children: [{ name: 'b', children: null },{ name: 'c', children: [{ name: 'd', children: null },{ name: 'e', children: [{ name: 'f', children: null }] }]}]
}

这里面的结构可能还会有更多的嵌套,首先递归的思路是对的,我们要找一个临界条件来终止整个递归,有一个条件才让他递归。
首先递归肯定是要循环的。
我们可以去循环data整个对象,也可以按照children数组的形式去循环
我喜欢喜欢数组,其实大同小异。

const aaa = (data) => {Array.isArray(data) ? data = data : data = [data]return data.map(item => {item['label'] = item.nameif (item.children && item.children.length !== 0) {aaa(item.children)}return item})
}

我们使用map循环,map的话可能返回一个新的数组,是符合我们递归的需求,不需要新建立一个变量来存储改变之后的数组对象。
这个问题的临界点就是,children是否存在子级,那我们就可以这样判断找到临界

item.children && item.children.length !== 0

只有children存在并且他里面的水族项是有值的才能让他递归,否则不参与递归,直接返回。
递归的话,直接再一次

aaa(item.children)

进入递归条件。这个时候操作的都是item.children里的数组对象,当然这里面也有用带复杂数据类型引用关系的特点。
在这里插入图片描述
这样成功了,我们也可以吧name属性删除

delete item.name

在这里插入图片描述

http://www.lryc.cn/news/34172.html

相关文章:

  • 重磅!牛客笔试客户端可防ChatGPT作弊
  • 春季训练营 | 前端+验证直通车-全实操项目实践,履历加成就业无忧
  • 2.详解URL
  • Android特别的数据结构(二)ArrayMap源码解析
  • 减少if else
  • 硕士毕业论文常见的排版小技巧
  • JAVA开发(数据类型String和HasMap的实现原理)
  • Hbase 映射到Hive
  • 14_MySQL视图
  • 做程序界中的死神,斩魂刀始解
  • 顺序表——“数据结构与算法”
  • 嵌入式Linux从入门到精通之第十六节:U-boot分析
  • UART 串口通信
  • 【硬件】P沟道和N沟道MOS管开关电路设计
  • 中移杭研一面经历
  • 如何成为一名全栈工程师:专业建议与技能要求
  • MySQL架构篇
  • Redhat7.6安装weblogic10.3.6(超详细,有图文)
  • dashboard疏散主机提示报错:无法疏散主机...处理方法、openstack虚拟机状态卡在重启处理方法、openstack在数据库修改虚拟机状态的方法
  • 力扣:轮转数组(详解)
  • Vue计算属性Computed
  • 实验四:搜索
  • 本地开发vue项目联调遇到访问接口跨域问题
  • Vue键盘事件的使用
  • 抓包工具fiddler详细使用教程
  • raspberry Pi 连接蓝牙(小爱同学)
  • 解决launch:program .exe does not exist
  • ETL --事实表
  • 手工数据采集耗时耗力?Smartbi数据填报实现数据收集分析自动化
  • 应用实战|微信小程序开发示例--多人聊天互动空间