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