js递归的一些理解

一.递归的使用环境

在写一些逻辑的时候,如果碰到一些很杂乱的数据,比如在一个多层嵌套数组找出你需要的数据,这时候是可以通过循环去循环数组去查找你需要的数据,但是如果这个数组并不是一两层,而是五六层,甚至更多,没有一个固定的层数,那么这个时候如果用循环不停去找这个数据并不是一个好的解决办法,而且循环每循环一层消耗的性能特别大,如果循环多了,就也会报超出执行栈的错误.
这个时候可以试试用递归解决这个困难的问题.

二.递归的概念

递归的概念非常简单,也就是在程序的函数中直接或间接的调用自己,并且必须要有一个跳出结果.

三.递归的步骤

  1. 假设递归函数已经写好
  2. 寻找递推关系
  3. 将递推关系的结构转换为递归体
  4. 将临界条件加入到递归体中

四.递归的写法

说了这么多,展示代码说明吧!!!

data: [
        {
          name: '1-1',
          children: [
            {
              name: '1-1-1',
              children: [
                {
                  name: '1-1-1-1',
                  children: [],
                },
                {
                  name: '1-1-2-1',
                },
              ],
            },
            {
              name: '1-2-1',
            },
            {
              name: '1-3-1',
            },
          ],
        },
        {
          name: '2-1',
        },
        {
          name: '3-1',
        },
        {
          name: '4-1',
        },
      ],

就比如这个是后端返回的数据
如果需求是要查找最下一级的数据,但是因为数据嵌套的特别深,如果要拿到里面的数据,如果用循环可能用三个以上的循环才能拿到数据,这样的话可能消耗的性能特别大,甚至浏览器卡死
但是用递归就能解决这个困难的问题

send(task) {
      for (const item of task) {
        if ('children' in item) {
          if (item.children.length === 0) {
            delete item.children
          } else {
            this.send(item.children)
          }
        } else {
          return
        }
      }
    },```

这样的话可以极低的去消耗性能,每一次都去循环当层的数据,如果没找到再去找他的子集知道找到为止
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值