- 深拷贝
function checkType(target) {
return Object.prototype.toString.call(target).slice(8, -1)
}
function clone(target) {
let result,
targetType = checkType(target)
if (targetType === 'Object') {
result = {}
} else if (targetType === 'Array') {
result = []
} else {
return target
}
for (let i in target) {
let value = target[i]
if (checkType(value) === 'Object' || checkType(value) === 'Array') {
result[i] = clone(value)
} else {
result[i] = value
}
}
return result
}
const obj = {'name': 'zhou',say: ()=>{console.log('what?')}}
console.log(JSON.parse(JSON.stringify(obj)));
console.log(clone(obj));
- 大数求和
function bigNumAdd(a, b) {
let temp = 0,
res = [];
let s1 = a.split('').reverse();
let s2 = b.split('').reverse();
let format = (val) => {
if (!isNaN(Number(val))) return Number(val)
return 0
}
for (let i = 0; i <= Math.max(s1.length, s2.length); i++) {
let addRes = format(s1[i]) + format(s2[i]) + temp;
res[i] = addRes % 10;
temp = addRes >= 10 ? 1 : 0;
}
res.reverse();
const resultNum = res[0] > 0 ? res.join('') : res.slice(1).join('');
return resultNum;
}
console.log(bigNumAdd('13254', '4354325'));
- 数组去重
Array.prototype.unique = function () {
return this.filter((x,y) => this.indexOf(x) === y)
}
Array.prototype.unique = function () {
const res = []
this.forEach(it => {
if (res.indexOf(it) === -1) {
res.push(it)
}
})
return res
}
new Set(arr)
- map方法
- shuffle
var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411];
var numbers_ = numbers.slice();
numbers_ = numbers_.sort(function(){ return Math.random() - 0.5});
- 节流
function throttle(fn, time) {
let lastTime = 0;
return function throttled() {
const nowTime = Date.now();
if (nowTime - lastTime > time) {
fn.apply(this, arguments);
lastTime = nowTime;
}
};
}
- 防抖
function debounce(fn, time) {
let timer = null;
return function debounced() {
console.log('event', event);
console.log('this', this);
const _self = this;
const args = arguments;
clearTimeout(timer);
timer = setTimeout(function() {
fn.apply(_self, args);
}, time);
};
}
- 事件绑定
Function.prototype.eventbus = function () {
let allEvents = {}
this.on = function (ename, callback) {
if (!allEvents[ename]) {
allEvents[ename] = []
} else {
allEvents[ename].push(callback)
}
}
this.emit = function (ename, data) {
if (allEvents[ename] && allEvents[ename].length > 1) {
allEvents[ename].forEach(it => {
it(data)
})
}
}
this.off = function (ename) {
if (ename) {
delete allEvents[ename]
} else {
allEvents = {}
}
}
}
- call、apply、bind
Function.prototype.myCall = function(context, ...args) {
context.__proto__._fn = this
const result = context._fn(...args)
delete context.__proto__._fn
return result
}