一些手写函数

25 阅读1分钟

1.扁平化数组

巧用reduce,[reduce]方法为数组中的每个元素按序执行一个reducer函数,每一次运行 reducer 会将先前元素的计算结构作为参数传入,最后将其结果汇总为单个返回值

function checkType(obj)=> Object.prototype.toString.call(obj).toLocaleLowerCase().slice(8,-1)

function flatter(arr){
   if(checkType(arr)!="array"){
       return
   }
   return arr.reduce((old,curr)=>{
      if(checkType(curr)=="array"){
          return old.concat(flatter(curr))
      }else{
          return old.concat(curr)
      }
   },[])
}

var arrl=[1,2,[3,4,[5,6,[7,8]],9],0]  // [1,2,3,4,5,6,7,8,9,0]

2.节流和防抖

防抖和节流的区别:

防抖:n秒内多次触发,重新计算时间,理念:每次触发都取消原来的调用方法, 执行新的调用方法 节流:n秒内触发,只执行一次,会稀释函数的执行频率,理念:每次触发都判断是否有等待执行的演示函数,有就等待,没有触发
区别: 节流将多次执行变成隔一段时间执行,防抖:将多次执行变成最后一次执行

// 防抖
function debounce(func,time){
    let timer=null;
    return funtion(){
        if(timer) clearTimeout;
        timer=setTimeout(()=>{
            func.apply(this,arguments)
        },time)
    }
}

// 节流
function throttle(func,time){
    let timer =null;
    return function(){
        if(!timer){
            timer = setTimeout(()=>{
                fun.apply(this,arguments)
                timer=null
            },time)
        }
    }
}