10-2.递归函数
函数调用自身就叫递归。
递归平时是用来写算法的。
当我们想将arr = [1,2,3,[4,5]];
输出结果为1,2,3,4,5,6,7
这样的形式时,我们可以这样:
var arr = [1,2,3,[4,5]];
for (var i = 0, length = arr.length; i<length; i++){
if (typeof arr[i] !== 'object'){//当第i项不是数组或对象时,直接输出
console.log(arr[i]);
}else{//主要就是解决[4,5]
var result = arr[i];
for( var a = 0,length = result.length; a<length; a++){
console.log(result[a]);
}
}
}
此时虽然效果达到了,但是如果我们换成arr = [1,2,3,[4,5,[6,7]]]
呢,就必须再写一层for循环,为了解决这种问题,我们采用递归,调用函数即可:
function fn(arr) {
for( var i = 0,length = arr.length; i < length; i++){
if( typeof arr[i] !== 'object'){
console.log(arr[i]);
}else{
fn( arr[i] );//再次调用fn函数
}
}
}
var arr = [1,2,3,[4,5,[6,7]]];
fn( arr );
//原理就是:打印数组的每一项,如果这一项不是一个对象,就直接打印,如果是一个对象,把这个对象传入fn,再去进行拆解
下面再用一个对象来举个例子📃
var obj = {
nickname : '公孙离',
age: 18,
attack:{
physical: 1200,
magic: 800,
skill:['晚云落','岑中归月','霜叶舞']
}
}
function hero(obj){
for ( var key in obj){
console.log('键名:', key, ' 键值: ',obj[key]);
if( typeof obj[key] !== 'object'){
var obj_a = {};
obj_a[key] = obj[key];
}else{
hero( obj[key] );
}
}
}
hero( obj );