一、every
判断是否所有元素都通过测试函数,返回boolean值,只要有一个元素不能通过,则停止遍历
callback
1、ele 当前元素
2、当前元素索引
3、arr调用方法的数组
Array.prototype.myEvery = function(callback,thisarg){let arr = this,thisValue = thisarg || window,length = this.length;console.log(thisValue)for(var i = 0 ;i < length; i++){let currentEle = arr[i],result = callback.apply(thisValue, [currentEle, i, arr]);//如果函数是箭头函数,则改变不了this指向if(!result){return false}}return true}
二、some
判断是否有一个元素能通过测试函数,只要有一个元素通过测试,停止遍历
Array.prototype.mySome = function(callback,thisarg){let arr = this,length = this.length,thisValue = thisarg || window;for(var i = 0 ; i<length; i++){let currentEle = arr[i],result = callback.apply(thisValue, [currentEle, i arr]);if(result){return true}}return false}
三、reduce
对每个元素执行reducer函数,并将返回值汇总为单个值进行返回。
接受两个参数
a、reducer函数
reducer接受四个函数,每次的返回值,会赋值给accumulotar进行下一次计算
(1)accumulator,累计器
(2)ele,当前元素
(3)当前元素下标
(4)调用该方法的函数
b、initialValue 初始值
如果有initialValue,初始值会赋值给accumulotar,从数组第一个元素开始执行reducer函数。
如果没有,则将数组首项元素作为accumulotar,从下一位元素开始执行reducer。
Array.prototype.myReduce = function(callback,initialValue){let arr = this,length = this.length,accumulotar = initialValue || arr[0],i = initialValue ? 0 : 1;for(; i < length; i++){accumulotar = callback(accumulotar, arr[i], i, arr)}return accumulotar}
四、reduceRight
从数组尾项开始遍历数组,对每个元素执行reducer,将返回值汇总为单个值进行返回。
Array.prototype.myReduceRight = function(callback,initialValue){let arr = this,len = this.length,i = initialValue ? len || len - 1,accumulotar = initialValue || arr[0];for(;i >= 0; i--){accumulotar = callback(accumulotar,arr[i],arr)}return accumulotar}
