递归:函数内部自己调用自己,这个函数就是递归函数,但是递归里面必须加退出条件
先看一个小例子
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))