reduce() :累計期,對數組中的每一個元素執行給定的reducer函數(升序執行),將其結果彙總爲單個返回值。
語法:
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])數組
callback:執行數組中每一個值 (若是沒有提供 initialValue則第一個值除外
)的函數函數
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