一、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
}