啥是递归函数? 一个函数通过名字调用自身,这就叫递归函数
- 写个简单的递归
// 递归计算阶乘
let face = (function total(num){
if(num <= 1) {
return 1
}
return num * total(num -1)
})
face(12) // output 479001600
- 在平时开发用到的复制对象,也是用到递归
let obj = {
name:'leon',
age:38,
list:['brother','sister','small'],
type:{
people:{
sex:'男性'
},
height:'2.1米'
}
}
// 支持Object,Array,string,number,boolean,null类型,有一定的局限性
let deepClone1 = JSON.parse(JSON.stringify(obj))
// 所以用递归复制
function deepClone(obj) {
// 非对像返回当前值
if (!obj || typeof obj !== 'object') {
return obj;
}
let newObj = {};
// array or object
if (Array.isArray(obj)) {
newObj = obj.map(item => deepClone(item));
} else {
for (let item in obj) {
newObj[item] = deepClone(obj[item]);
}
}
return newObj
}
// 递归基本支持所有类型
let deepClone2 = deepClone(obj);
- 可以加个扩展,过滤掉所有的null和undefined
网友评论