手寫一個 reduce 方法

reduce() :累計期,對數組中的每一個元素執行給定的reducer函數(升序執行),將其結果彙總爲單個返回值。
語法:
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])數組

  • callback:執行數組中每一個值 (若是沒有提供 initialValue則第一個值除外)的函數函數

    • accumulator: 累計器,是上一次調用回調時返回的累積值,或initialValue
    • currentValue: 當前值
    • index: 當前索引
    • array: 源數組
  • initialValue: 初始值,默認爲數組的第一個

寫個例子:code

var arr=[1,2,3,4];
    var s1 = arr.reduce(function (result,item){
        // console.log(result,item)
        return result + item
    })
    console.log(s1)   // 10  
    /*
        打印每次的 result 和 item 
        1 2 
        3 3
        6 4
        能夠發現 每次result 的值都是上一次的 result + item,而且第一次的 result 就是數組的第一個值
    */
    
    var s2 = arr.reduce(function (result,item){
        console.log(result, item)
        return result + item
    },10)   // 20
    /*
        打印每次的 result 和 item 
        10 1
        11 2
        13 3
        16 4
        能夠發現 每次result 的值都是上一次的 result + item,而且第一次的 result 是給定的初始值 10
    */

reduce 的做用原理大體瞭解了,如今手寫一個具備reduce功能的函數索引

function reduce(arr, cb, initialValue){
        var num = initValue == undefined? num = arr[0]: initValue;
        var i = initValue == undefined? 1: 0
        for (i; i< arr.length; i++0){
            num = cb(num,arr[i],i)
        }'
        return num
    }
    
    function fn(result, currentValue, index){
        return result + currentValue
    }
    
    var arr = [2,3,4,5]
    var b = reduce(arr, fn,10) 
    var c = reduce(arr, fn)
    console.log(b)   // 24

這樣 一個具備簡易reduce功能的函數就實現了it

小擴展
利用reduce還能夠找出數組中的最大值io

var arr = [20, 45, 88, 12, 2, 33];
    var max = reduce(function (result, item){
        return result>item?result: item
    })
    console.log(max)  // 88
相關文章
相關標籤/搜索