美文网首页
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常见原生方法重写汇总(二)

    reduce reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参...

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

    Object.create 原理:创建对象,并且现有的对象来提供新创建的对象的proto。 new 原理:创建实例...

  • OC与JS交互

    1.OC重写JS里边的方法事件JS回调OC的原生方法 1.uiwebView 导入系统的处理JS文件 import...

  • JS中的盒模型

    查看JS盒模型相应的CSDN JS中最常见的原生DOM的属性和方法

  • WKWebView与vue.js的交互

    原生调用js的方法 js写法 Swift写法 js调用原生的方法 js写法 Swift写法 1.创建和设置JSOb...

  • RAC-API简介

    一、常见类 二、常见用法 三、常见宏 四、常用操作方法 五、UI - Category(常用汇总) 六、Found...

  • js关于数组的方法汇总

    js关于数组的方法汇总

  • 重写JS方法

    1. 浅拷贝 2. 深拷贝 对象深度合并 3. 重写promise

  • 实现点击按钮 复制文本内容

    一、原生方法 1、结构 2、js 二、引用插件方法 1、插件地址 https://clipboardjs.com/...

  • 第四天2018-10-24

    switf原生与html.js交互 目的:实现点击更换图片的功能原理:点击->js调用原生方法->在原生的方法里面...

网友评论

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

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