var obj = {
name: '张三',
age: '18',
hobby: ['唱歌', '跳舞']
}
function shenClone(obj) {
let obj1 = obj instanceof Array ? [] : {}
for (k in obj) {
// 遍历元素需要判断一下是否是对象类型
obj1[k] = typeof obj[k] == 'object' ? shenClone(obj[k]) : obj[k]
}
return obj1
}
let obj2 = shenClone(obj)
console.log(obj2);
数据拉平中使用
let arr = [1, 2, [3, 4, [5, 6]]]
// 如果b变量放在函数里边我们每次回调都是一个空数组,这样造成打印不了我们要的结果
let b = []
function laPing(arr) {
for (k in arr) {
if (Array.isArray(arr[k])) {
laPing(arr[k])
} else {
b.push(arr[k])
}
}
return b
}
let arr1 = laPing(arr)
console.log(arr1);
递归实现求和(1-100之间的数)
function qiuHe(n) {
if (n == 1) return 1;
return qiuHe(n - 1) + n
}
let c = qiuHe(100)
console.log(c);
// 如果是一个数组呢?
let newArr = [1, 2, 3, 4]
function sum(arr) {
function f(i) {
return i >= arr.length ? 0 : f(i + 1) + arr[i]
}
return f(0)
}
let c2 = sum(newArr)
console.log(c2);
阶乘
function factorial(n) {
// 这个起始就是一个起始状态
if (n === 1) {
return 1
}
// 返回每次函数调用一次的乘积
return n * factorial(n - 1)
}
let ji = factorial(5)
console.log(ji);