reduce() :累计期,对数组中的每个元素执行给定的reducer函数(升序执行),将其结果汇总为单个返回值。
语法:
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
callback:执行数组中每个值 (如果没有提供
initialValue则第一个值除外
)的函数- accumulator: 累计器,是上一次调用回调时返回的累积值,或
initialValue
- currentValue: 当前值
- index: 当前索引
- array: 源数组
- accumulator: 累计器,是上一次调用回调时返回的累积值,或
- 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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。