深拷贝
var deepCopy = function(obj) {
console.log(11)
if (typeof obj !== 'object') return;
var newObj = obj instanceof Array ? [] : {};
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key];
}
}
return newObj;
}
扁平化
const flatten = (arr) => {
let result = [];
arr.forEach((item, i, arr) => {
// 若为数组,递归调用 faltten,并将结果与result合并
if (Array.isArray(item)) {
result = result.concat(flatten(item));
} else {
result.push(arr[i])
}
})
return result;
};
扁平化es6
function flatten(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
楼梯
function climbStairs(n) {
if (n == 1) return 1
if (n == 2) return 2
return climbStairs(n-1) + climbStairs(n-2)
}
复合函数
function pipe() {
var fns = [].slice.call(arguments) //能将具有length属性的对象转成数组
return function (initialAgr) {
var res = initialAgr
for (var i = 0; i < fns.length; i++) {
res = fns[i](res)
}
return res
}
}
数据类型判断
function typeOf(obj) {
return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase()
}
typeOf(new Date)
Function 与 eval 有相同的字符串参数特性
var json = '{"name":"小姐姐", "age":20}';
var obj = (new Function('return ' + json))();