js数组的reduce()方法
reduce [rɪˈdjuːs] 翻译为:减少
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
注意: reduce() 对于空数组是不会执行回调函数的。
reduce() 方法对累加器和数组中的每个元素(从左到右)应用一个函数,将其简化为单个值。
reduce为数组中的每一个元素依次执行callback函数,不包括数组中被删除或从未被赋值的元素,接受四个参数。
语法
:
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
function必需。用于执行每个数组元素的函数。
函数参数:
参数 | 描述 |
---|---|
total | 必需。初始值, 或者计算结束后的返回值。累加器。 |
currentValue | 必需。当前元素 |
currentIndex | 可选。当前元素的索引 |
arr | 可选。当前元素所属的数组对象。 |
initialValue:可选。传递给函数的初始值。
回调函数第一次执行时,total 和currentValue的取值有两种情况:如果调用reduce()时提供了initialValue,total取值为initialValue,currentValue取数组中的第一个值;如果没有提供 initialValue,那么total取数组中的第一个值,currentValue取数组中的第二个值。
应用示例
:
数组求和:
var numbers = [15.5, 2.3, 1.1, 4.7];
function getSum(total,nums){
return total + nums
}
var result = numbers.reduce(getSum,0)
console.log(result) // 23.6
var result1 = numbers.reduce(getSum,10)
console.log(result1) // 33.6
var result2 = numbers.reduce((total,item)=>{
return total + item
})
console.log(result2) // 23.6
var result3 = numbers.reduce((total,item)=>{
return total + item
},10)
console.log(result3) // 33.6
将二维数组转化为一维:
var arr1 = [
[0, 1],
[2, 3],
[4, 5]
]
var arr2 = arr1.reduce(
(arr, item) => arr.concat(item) ,
[]
)
console.log(arr2) // (6) [0, 1, 2, 3, 4, 5]