常见功能函数整理

224 阅读1分钟

整理了一些常用的功能函数,主要是平时参考别人博客以及自己的思考写的

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;
}