一、every
    判断是否所有元素都通过测试函数,返回boolean值,只要有一个元素不能通过,则停止遍历
    callback
    1、ele 当前元素
    2、当前元素索引
    3、arr调用方法的数组

    1. Array.prototype.myEvery = function(callback,thisarg){
    2. let arr = this,
    3. thisValue = thisarg || window,
    4. length = this.length;
    5. console.log(thisValue)
    6. for(var i = 0 ;i < length; i++){
    7. let currentEle = arr[i],
    8. result = callback.apply(thisValue, [currentEle, i, arr]);
    9. //如果函数是箭头函数,则改变不了this指向
    10. if(!result){
    11. return false
    12. }
    13. }
    14. return true
    15. }

    二、some
    判断是否有一个元素能通过测试函数,只要有一个元素通过测试,停止遍历

    1. Array.prototype.mySome = function(callback,thisarg){
    2. let arr = this,
    3. length = this.length,
    4. thisValue = thisarg || window;
    5. for(var i = 0 ; i<length; i++){
    6. let currentEle = arr[i],
    7. result = callback.apply(thisValue, [currentEle, i arr]);
    8. if(result){
    9. return true
    10. }
    11. }
    12. return false
    13. }

    三、reduce
    对每个元素执行reducer函数,并将返回值汇总为单个值进行返回。
    接受两个参数
    a、reducer函数
    reducer接受四个函数,每次的返回值,会赋值给accumulotar进行下一次计算
    (1)accumulator,累计器
    (2)ele,当前元素
    (3)当前元素下标
    (4)调用该方法的函数
    b、initialValue 初始值
    如果有initialValue,初始值会赋值给accumulotar,从数组第一个元素开始执行reducer函数。
    如果没有,则将数组首项元素作为accumulotar,从下一位元素开始执行reducer。

    1. Array.prototype.myReduce = function(callback,initialValue){
    2. let arr = this,
    3. length = this.length,
    4. accumulotar = initialValue || arr[0],
    5. i = initialValue ? 0 : 1;
    6. for(; i < length; i++){
    7. accumulotar = callback(accumulotar, arr[i], i, arr)
    8. }
    9. return accumulotar
    10. }

    四、reduceRight
    从数组尾项开始遍历数组,对每个元素执行reducer,将返回值汇总为单个值进行返回。

    1. Array.prototype.myReduceRight = function(callback,initialValue){
    2. let arr = this,
    3. len = this.length,
    4. i = initialValue ? len || len - 1,
    5. accumulotar = initialValue || arr[0];
    6. for(;i >= 0; i--){
    7. accumulotar = callback(accumulotar,arr[i],arr)
    8. }
    9. return accumulotar
    10. }