首页 > 其他分享 >侃侃代码递归的实战

侃侃代码递归的实战

时间:2023-09-07 22:13:12浏览次数:34  
标签:实战 递归 show 侃侃 label 234234234 listElement true children

如果我们有一个需求,把一个tree结构的数据的第三级的数据的属性show修改成false,如果children里面的都是false那么父级的show也是false

// 测试数据
const list = [{
    label: '234234234',
    show: true,
    children: [{
            label: '123123',
            show: true,
            children: [{
                    label: '234234234',
                    show: true,
                    children: [{
                            label: '234234234',
                            show: true
                        },
                        {
                            label: '234234234',
                            show: true
                        }
                    ]
                },
                {
                    label: '234234234',
                    show: true
                },
                {
                    label: '234234234',
                    show: true,
                    children: [{
                        label: '234234234',
                        show: true
                    }]
                }
            ]
        },
        {
            label: '234234234',
            show: true
        }
    ]
}]

 

 

 

那么怎么处理这个需求呢?答案肯定是需要用到递归函数

// 测试数据
const list = [{
    label: '234234234',
    show: true,
    children: [{
            label: '123123',
            show: true,
            children: [{
                    label: '234234234',
                    show: true,
                    children: [{
                            label: '234234234',
                            show: true
                        },
                        {
                            label: '234234234',
                            show: true
                        }
                    ]
                },
                {
                    label: '234234234',
                    show: true
                },
                {
                    label: '234234234',
                    show: true,
                    children: [{
                        label: '234234234',
                        show: true
                    }]
                }
            ]
        },
        {
            label: '234234234',
            show: true
        }
    ]
}]
// 未改变之前
console.log(JSON.stringify(list, null, 4))
const deep = (roots, level = 0) => {
    for (const listElement of roots) {
        listElement.level = level
        // if (listElement.level == 1) {
        //   listElement.show = false
        // }

        if (listElement.show && listElement.level == 3) {
            listElement.show = false
            deep(list, 0)
        }
        if (listElement.children && listElement.children.length) {
            if (
                listElement.show &&
                listElement.children.filter((v) => v.show).length == 0
            ) {
                listElement.show = false
                deep(list, 0)
                break
            }

            deep(listElement.children, listElement.level + 1)
        } else {
            if (listElement.show) {
                listElement.show = false
                deep(list, 0)
            }
        }
    }
}

deep(list, 0)
// 改变之后
console.log(JSON.stringify(list, null, 4))

 

 

关键点的解析

 

首先递归要注意条件 ,否则就是会堆栈溢出也就是死循环。

注意观察代码每一次调用递归前面都有一个if 这个if就是防止死循环的。

另一个细节就是每次修改属性了以后就再次从根节点开始,这样就是可以防止漏掉父级的判断。

 

标签:实战,递归,show,侃侃,label,234234234,listElement,true,children
From: https://www.cnblogs.com/yeminglong/p/17686205.html

相关文章

  • 构建全栈安全防护体系,华为云828营销季助力企业打好上云实战
    近年来,云计算等技术蓬勃发展,成为企业数字化转型的重要技术基石。在数据高速增长的同时,数据价值与数据安全问题也在逐步显现。为助力中小企业把好安全关,以“选择华为云,省力更省心”为主题的华为云828营销季带来网站安全、数据灾备、网站高可用等解决方案,为企业筑好数据安全的第一道......
  • Exchange 2016 服务器实战化操作-- 5. Exchange 就地电子数据展示和保留
    ==回顾:==上篇文章,我们成功实现了OWA和ECP的SSO单点登录配置,今天我们来看一下Exchangeserver2019的就地电子数据展示和保留,如果你的组织遵守与组织策略、合规性或诉讼相关的法律发现要求,ExchangeServer中的In-Place电子数据展示可以帮助你对邮箱中的相关内容执行发现搜索......
  • Vue3实战06-CompositionAPI+<script setup>好在哪?
    Vue3的CompositionAPI+<scriptsetup>这种最新的代码组织方式。<scriptsetup>是啥?为啥尤大在微博强推?本文就使用CompositionAPI和<scriptsetup>重构第2讲的清单应用。重构过程将明白,CompositionAPI让我们更好组织代码结构,<scriptsetup>本质是更精简方式写Compositi......
  • Vue3实战06-CompositionAPI+<script setup>好在哪?
    Vue3的CompositionAPI+<scriptsetup>标签内定义的变量和函数,都可以在模板中直接使用。###1.2显示清单应用实现累加器后,回到src/pages/Home.vue组件,使用如下代码显示清单应用。直接importTodoList.vue组件,然后<scriptsetup>会自动把组件注册到当前组件,这样......
  • 【ROS2机器人入门到实战】第 十四 章 接入ROS2-MicroROS
    第十四章接入ROS2-MicroROS写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn,我是小鱼。上一章我们通过对嵌入式开发的学习......
  • 【ROS2机器人入门到实战】PIO工程结构&构建方式
    4.PIO工程结构&构建方式写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn你好,我是爱吃鱼香ROS的小鱼。上一节我们搭建好了PIO......
  • 【ROS2机器人入门到实战】SLAM技术概述
    10.3SLAM技术概述写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn小伙伴们好,上一节我们搭建好了Gazebo中的仿真环境,本节课......
  • 【ROS2机器人入门到实战】Gazebo仿真环境搭建
    7.Gazebo仿真环境搭建写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn本节我们要在Gazebo中建立一个测试的环境,其实也很简单......
  • 【ROS2机器人入门到实战】使用Nav2导航API进行导航
    4.使用Nav2导航API进行导航写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cnNav2的API其实是Nav2提供的一个Python库,通过该库......
  • 【ROS2机器人入门到实战】电机控制之正反转实验
    3.电机控制之正反转实验写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn你好,我是小鱼。前面说到通过控制对应的IO电平变换即......