美文网首页
js常见原生方法重写汇总(二)

js常见原生方法重写汇总(二)

作者: isSunny | 来源:发表于2022-03-29 16:47 被阅读0次
    reduce

    reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。

    Array.prototype._reduce = function(callback,next){
      let i,total;
      if(next){
        i = 0;
        total = next;
      }else{
        i = 1;
        total = this[0];
      }
      for(i;i<this.length;i++){
        let a = this[i];
        total = callback(total,this[i],i,this);
      }
      return total;
    }
    let arr  = [1,2,2,3,3,4,5];
    function q(arr){
      return arr._reduce((a,b)=>{
        if(!a.includes(b)){
          a.push(b);
        }
        return a;
      },[])
    }
    console.log(q(arr));//[1,2,3,4,5]
    
    map

    遍历数组,执行回调函数,方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

    //map
    Array.prototype._map = function(callback){
      let a = [];
      for(let i=0;i<this.length;i++){
       a.push(callback(this[i],i,this));
      }
      return a;
    }
    let newArr = arr._map(function(val,i,array){
      return val*2;
    })
    console.log(newArr);//[2,4,6,8,10]
    
    promise.all

    promise.all返回的结果是一个Promise实例,传入的是一个数组,要求数组的每一项都是新的promise实例,Promise.all是等待所有数组中的实例状态都成功,它的状态才为成功,value是一个数组,存储着数组中每一个实例返回的结果,如果有一个失败,则状态为失败。

    function promiseAll(promises){
      let arr = [];
      let num =0;
      return new Promise((resolve,reject)=>{
        promises.forEach((item,i)=>{
          item.then((res)=>{
            arr[i] = res;
            num++;
            num===promises.length&&resolve(arr);
          },err=>{
            reject(err+'err');
          })
        })
      })
    }
    let p1 = new Promise((resolve)=>{
      resolve(1);
    })
    let p2 = new Promise((resolve,reject)=>{
      //reject(2);
      resolve(2);
    })
    promiseAll([p1,p2]).then((res)=>{
      console.log(res);
    },err=>{
      console.log(err);
    })
    //[1,2] 
    //2err
    
    Promise.race

    它和all不同的是,race是赛跑,也就是数组中不管哪一个先处理完,结果就作为“race实例”的结果。

    let p3 = new Promise((resolve)=>{
      setTimeout(()=>{
        resolve(1);
      },200)
      
    })
    let p4 = new Promise((resolve,reject)=>{
      setTimeout(()=>{
        reject(2);
      },1000)
    })
    function promiseRace(promises){
      return new Promise((resolve,reject)=>{
        promises.forEach(item=>{
          Promise.resolve(item).then(res=>{
            resolve(res);
          },err=>{
            reject(err);
          })
        })
      })
    }
    
    promiseRace([p3,p4]).then(res=>{
      console.log(res+'res');
    },err=>{
      console.log(err+"err");
    })
    //1res
    

    相关文章

      网友评论

          本文标题:js常见原生方法重写汇总(二)

          本文链接:https://www.haomeiwen.com/subject/tywpjrtx.html