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

简介: 本文讨论了如何使用递归处理将嵌套对象中的所有名称(name)属性转换为标签(label)属性的问题,提供了详细的递归函数实现思路和代码示例。

在这里插入图片描述
其实问题很简单,就是想要循环遍历整个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.name
        if (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

在这里插入图片描述

目录
相关文章
|
C语言 索引
09-iOS之load和initialize底层调用原理分析
09-iOS之load和initialize底层调用原理分析
226 0
|
11月前
|
自然语言处理
Havenask 分词器开发
本次分享由阿里云智能引擎工程师江半介绍Havenask分词器开发,内容涵盖三部分:1. 分词器插件简介,Tokenizer是Analyzer内部组件,负责文本切词;2. 内置分词器介绍,包括simple、aliws、multilevel_aliws和singlews等类型;3. 分词器开发实战,通过特定分隔符切词的TestTokenizer插件,详细讲解编写分词器插件的流程。整个过程涉及初始化、配置读取及Token生成等步骤。
190 2
|
前端开发 JavaScript
前端JS截取url上的参数
文章介绍了两种前端JS获取URL参数的方法:手动截取封装和使用URLSearchParams。
393 0
|
缓存 前端开发 JavaScript
在react项目中实现按钮权限createContext && useContext
文章介绍了在React项目中如何使用`createContext`和`useContext`来实现按钮级别的权限控制。
235 0
|
前端开发 JavaScript
前端基础(八)_JavaScript循环(for循环、for-in循环、for-of循环、while、do-while 循环、break 与 continue)
本文介绍了JavaScript中的循环语句,包括for循环、for-in循环、for-of循环、while循环、do-while循环以及break和continue的使用。
913 1
前端基础(八)_JavaScript循环(for循环、for-in循环、for-of循环、while、do-while 循环、break 与 continue)
|
敏捷开发 Java 测试技术
阿里云云效产品使用合集之后置清理操作的触发判断条件是什么
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
Java 大数据 开发工具
java学习——环境准备(1)
java学习——环境准备(1)
114 0
|
缓存 Linux 虚拟化
Linux下top命令指标说明
Linux下top命令指标说明
1097 0
|
Python
【Leetcode刷题Python】26. 删除有序数组中的重复项
本文提供了一种使用快慢指针法在原地删除升序数组中重复元素的Python实现,返回删除后数组的新长度,同时保持元素的相对顺序。
131 0
JAVA——List中剔除空元素(null)的三种方法汇总
JAVA——List中剔除空元素(null)的三种方法汇总