深拷贝
/**
* deepClone 深拷贝
* @param {object} origin 源对象
* @param {object} target 目标对象
*/
function deepClone (origin, target) {
var tar = target || {},
toStr = Object.prototype.toString,
arrType = '[object Array]';
for (var k in origin) {
if (origin.hasOwnProperty(k)) {
if (typeof origin[k] === 'object' && origin[k] !== 'null') {
tar[k] = toStr.call(origin[k]) === arrType ? [] : {};
deepClone(origin[k], tar[k]);
} else {
tar[k] = origin[k];
}
}
}
return tar;
}
typeof加强版
/**
* myTypeof 加强版typeof
* @param {any} value 需要进行数据类型检测的值
*/
function myTypeof (value) {
if (value === null) {
return 'null';
}
return typeof value === 'object' ? {
"[object Object]": "object",
"[object Array]": "array",
"[object String]": "String",
"[object Number]": "Number",
"[object Boolean]": "Boolean"
}[{}.toString.call(value)] : typeof value;
}
数组扁平化
/**
* flatten 数组扁平化
*/
Array.prototype.flatten = function () {
var _arr = this,
toStr = {}.toString;
if(toStr.call(_arr) !== '[object Array]'){
throw new Error('Only Array can use it');
}
return _arr.reduce((prev, item) => {
return prev.concat(
toStr.call(item) === '[object Array]' ? item.flatten() : item
)
}, [])
}
数组去重
/**
* removeRe 数组去重
*/
Array.prototype.removeRe = function () {
var _arr = this,
_obj = {};
_arr.forEach(item => {
_obj[item] = item;
})
return Object.values(_obj);
}