手写数组操纵罕见要领的polyfill

媒介:在JS操纵当中,前端开发人员对数组的操纵迥殊频仍,跟着每一次ECMAScript的发版,关于数组所供应的API也会增加,以加强数组的操纵能力。下面整顿了一些在事情当中经常使用的数据操纵要领的polyfill,轻易人人更好的控制其道理。

数组map和forEach要领

forEach要领的polyfill

Array.prototype.forEachFn = function(callback){
  for(var i = 0;i< this.length;i++){
    callback.call(this,this[i],i,this);
  }
};

var list = [1,2,4,8,10];
list.forEachFn(function(item,index,arr){
  return list[index] = item*2;
});  //无返回值

[2, 4, 8, 16, 20] //list

map要领的polyfill

Array.prototype.mapFn = function(callback){
var newArr = [];
 for(var i = 0;i< this.length;i++){
  newArr.push(callback.call(this,this[i],i,this));
 }
 return newArr;
}


 var list = [1,3,5,7,9];
 list.mapFn(function(item){
   return item*2;
 });     //实行完后返回一个新数组 [2, 6, 10, 14, 18]
 

再看看二者的实行速率:
《手写数组操纵罕见要领的polyfill》

能够看出forEach()的实行速率比map()慢了70%

相同点:
能用forEach()做到的,map()一样能够。反过来也是云云。

差别:

  1. forEach没有返回值,但可在callback里转变原数组,map返回一个新数组,不转变原数组,可链式挪用数组的其他要领。
  2. map实行速率比forEach更快。

数组every和some要领

every要领的polyfill

Array.prototype.everyFn = function(callback){
  for(var i = 0;i<this.length;i++){
    if(!callback.call(this,this[i],i,this)){
     return false;
    }
    
  }
 return true;
}
var list = [1,3,5,7,9];
list.everyFn((item)=>{
 return item>3
}); //返回false

some要领的polyfill

Array.prototype.someFn = function(callback){
 for(var i = 0;i<this.length;i++){
   if(callback.call(this,this[i],i,this)){
     return true;
    }
 }
 return false;
}

var list = [1,2,4,8,10];
list.someFn(item =>item>4) //返回true

var list = [1,2,4,8,10];
list.someFn(item =>item>12) //返回false

要领区分
every() 每一项都返回true才返回true
some() 只需有一项返回true就返回true

数组reduce和reduceRight要领

reduce要领的polyfill

Array.prototype.reduceFn = function(callback,initValue){
  var preValue = initValue || this[0];
  for(var i = initValue ? 0 : 1; i<this.length; i++){
    preValue = callback(preValue,this[i],i,this);
  }
  return preValue;
 }

乞降:

var list = [1,3,5,7,9];
list.reduceFn(function(prev,current,currentIndex,arr){
  return prev+current;
});  //返回25

乞降+10:

var list = [1,3,5,7,9];
list.reduceFn(function(prev,current,currentIndex,arr){
  return prev+current;
},10); //返回35

reduceRight要领的polyfill

Array.prototype.reduceRightFn = function(callback,initValue){
  var lastIndex = this.length - 1;
  var preValue = initValue || this[lastIndex];
  console.log(preValue);
  for(var i = initValue ? 0 : 1; i<this.length; i++){
    preValue = callback(preValue,this[lastIndex-i],i,this);
  }
  return preValue;
 }

乞降:

var list = [1,3,5,7,9];
list.reduceRightFn(function(prev,current,currentIndex,arr){
  return prev+current;
});  //返回25

乞降+10:

var list = [1,3,5,7,9];
list.reduceRightFn(function(prev,current,currentIndex,arr){
  return prev+current;
},10); //返回35

数组reduce要领其作用是对数组举行合并操纵,通报两个数组,第一个是callback,第二个参数可选(初始值)。个中回调函数 callback 吸收4个参数:

1.previousValue – 寄存的是上一次callback返回的效果,其初始值默以为数组的第一个元素。
2.currentValue – 是当前元素 。默许从数组的第二个元素最先。
3.currentIndex – 是当前元素位置 。
4.array – 是当前数组。

本日就整顿这么多了,假如有时间,我会继承雄厚本页面,以供应更全的材料供人人参考,假如喜欢我的文章,请Star!!!/::)

    原文作者:emcty
    原文地址: https://segmentfault.com/a/1190000016299019
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞