整理了一些常用的功能函数,主要是平时参考别人博客以及自己的思考写的
1. 防抖函数
//短时间多次触发事件时, 只有最后次生效
const debounce = (fun, wait) => {
let timer = null;
return () => {
// const argus = arguments;
timer && clearTimeout(timer);
timer = setTimeout(() => {
fun()
}, wait)
}
}
2.节流函数
//短时间多次触发事件时, 只有第一次生效
const throttle = (fun,wait) => {
let timer = null;
return () => {
if(!timer){
timer = setTimeout(()=>{
fun();
timer = null;
},wait)
}
}
}
3.实现flatten
function createFlatten(arr){
let result = [];
function flatten(arr){
for(let i of arr){
if(i instanceof Array){
flatten(i)
}else{
result.push(i)
}
}
}
flatten(arr);
return result;
}
console.log(createFlatten([1,2,[3,4],5,6])) //[ 1, 2, 3, 4, 5, 6 ]
4. 获取url参数
function getUrlParams(url){
const res = {};
if (url.indexOf('?') !== -1) {
const str = url.split('?')[1];
const arr = str.split('&');
arr.forEach(item => {
let [key, val] = item.split('=');
res[key] = val;
});
}
return res;
}
console.log(getUrlParams("https://www.baidu.com?a=1&b=2&c=3")) //
5.手写深拷贝
function clone(target, map = new Map()) {
if (typeof target === 'object') {
if (map.has(target)) return map.get(target);
let cloneTarget = Array.isArray(target) ? [] : {};
map.set(target, cloneTarget);
for (let key in target) {
cloneTarget[key] = clone(target[key], map);
}
return cloneTarget;
} else {
return target;
}
6. 数组去重
function getArr(arr){
return [...new Set(arr)]
}
7. 实现new 操作符
function _new(constructor, ...rest){
let obj = {};
obj.__proto__ = constructor.prototype;
constructor.apply(obj, rest);
return obj;
}