reduce() :累计期,对数组中的每个元素执行给定的reducer函数(升序执行),将其结果汇总为单个返回值。
语法:
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

  • callback:执行数组中每个值 (如果没有提供 initialValue则第一个值除外)的函数

    • accumulator: 累计器,是上一次调用回调时返回的累积值,或initialValue
    • currentValue: 当前值
    • index: 当前索引
    • array: 源数组
  • initialValue: 初始值,默认为数组的第一个

写个例子:

    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++){
            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功能的函数就实现了

小扩展
利用reduce还可以找出数组中的最大值

    var arr = [20, 45, 88, 12, 2, 33];
    var max = reduce(function (result, item){
        return result>item?result: item
    })
    console.log(max)  // 88

qsugar
0 声望1 粉丝