JS递归理解案例

递归:函数内部自己调用自己,这个函数就是递归函数,但是递归里面必须加退出条件

先看一个小例子

 var num = 1;
  function fn(){
    console.log('我要暴富');
    if(num ==6){
      return 
    }
    num++;
    fn()
  }
  fn()
  结果是'我要暴富'打印6次,因为第6次return

再来实现一个小demo,利用递归函数求1~n的阶乘 123*4 …n

 function fn(n){
    if(n ==1){
      return 1
    }
    return n * fn(n -1)
  }
  console.log(fn(3))

结果为6,怎么得到的呢?

用户输入的是3
return 3 * fn(2)
return 3 * (2 * fn(1))
return 3 * (2 * 1)

再来一个小demo,利用递归筛选遍历数据

我们想要做输入id号,就可以返回的数据对象
var data = [
  {id:1,name:'家电',goods:[{id:11,gname:'冰箱',goods:[{id:111,gname:'海尔'}]},{id:12,gname:'洗衣机'}]},
  {id:2,name:'服饰'}
]

//1.利用forEach去遍历里面的每一个对象
var o = {}
// 报错就把{}换成null
function getID(json,id){
  json.forEach(function(item){
    // console.log(item) //2个数组元素
    if(item.id ==id){
      // console.log(item)
      o = item
      // 2.我们想要得里层得数据11 12 可以利用递归函数
      // 里面应该有goods这个数组并且数组得长度不为0
    }else if(item.goods && item.goods.length >0){
     o =  getID(item.goods,id)
    }
  })
  return o
}

console.log(getID(data,1))
console.log(getID(data,2))
console.log(getID(data,11))
console.log(getID(data,12))
console.log(getID(data,111))

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值