什么是递归
递归: 定义:如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。简单理解的话就是:函数内部自己调用自己;
tips: 递归函数的作用和循环效果一样,由于递归很容易发生“栈溢出”错误(stack overflow),所以必须要加退出条件return。
案例: (写几个案例熟练一下递归):
- 利用递归求1~n的阶乘:
function fn(n) {
if (n == 1) {
return 1;
}
return n * fn(n - 1);
}
console.log(fn(3));
- 利用递归求斐波那契数列
function fb(n) {
if (n === 1 || n === 2) {
return 1;
}
return fb(n - 1) + fb(n - 2);
}
console.log(fb(3));
- 利用递归遍历数据
var data = [{
id: 1,
name: '家电',
goods: [{
id: 11,
gname: '冰箱',
goods: [{
id: 111,
gname: '海尔'
}, {
id: 112,
gname: '美的'
},
]
}, {
id: 12,
gname: '洗衣机'
}]
}, {
id: 2,
name: '服饰'
}];
function getID(json, id) {
var o = {};
json.forEach(function(item) {
if (item.id == id) {
o = item;
return o;
} else if (item.goods && item.goods.length > 0) {
o = getID(item.goods, id);
}
});
return o;
}
浅拷贝方法:
var obj = {
id: 1,
name: 'andy',
msg: {
age: 18
}
};
var o = {};
console.log('--------------');
Object.assign(o, obj);
console.log(o);
o.msg.age = 20;
console.log(obj);
深拷贝:(要考虑拷贝的数据类型)
var obj = {
id: 1,
name: 'andy',
msg: {
age: 18
},
color: ['pink', 'red']
};
var o = {};
function deepCopy(newobj, oldobj) {
for (var k in oldobj) {
var item = oldobj[k];
if (item instanceof Array) {
newobj[k] = [];
deepCopy(newobj[k], item)
} else if (item instanceof Object) {
newobj[k] = {};
deepCopy(newobj[k], item)
} else {
newobj[k] = item;
}
}
}
deepCopy(o, obj);
console.log(o);
var arr = [];
console.log(arr instanceof Object);
o.msg.age = 20;
console.log(obj);
tips: 深拷贝,数据类型判断的时候一定要把数组的判断放到对象的判断上面,因为:数组也属于对象,如果先判断对象,后判断数组,那么在对象判断的时候就成立了,也就没数组判断什么事儿了;
不断复盘,不断优秀,踏实做人,认真做事;关注三连,持续更新~~~
|