JS递归理解案例

802 阅读1分钟

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

先看一个小例子

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

再来实现一个小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))

2020060410394658.png