reduce()方法是数组原型上的方法(Array.prototype.reduce())
reduce(callbackFn,initialValue)有两个参数
第一个参数是一个callbackFn,我们就叫做reduce 回调函数,由用户自己提供
callbackFn(reduce 回调函数)有四个参数: 一个 “reducer” 函数,包含四个参数:
- previousValue:上一次调用 callbackFn 时的返回值。在第一次调用时,若指定了初始值 initialValue,其值则为 initialValue,否则为数组索引为 0 的元素 array[0]。
- currentValue:数组中正在处理的元素。在第一次调用时,若指定了初始值 initialValue,其值则为数组索引为 0 的元素 array[0],否则为 array[1]。
- currentIndex:数组中正在处理的元素的索引。若指定了初始值 initialValue,则起始索引号为 0,否则从索引 1 起始。
- array:调用reduc()的数组本身。
第二个参数 initialValue(初始值)可选的
作为第一次调用 callback 函数时参数 previousValue 的值。若指定了初始值 initialValue,则 currentValue 则将使用数组第一个元素;否则 previousValue 将使用数组第一个元素,而 currentValue 将使用数组第二个元素。
Array.reduce(callbackFn,initialValue) 是遍历数组,遍历一次就zh执行一次callback函数,
- 回调函数第一次执行时,previousValue 和 currentValue 的取值有两种情况:
1.如果调用 reduce() 时提供了 initialValue,previousValue 取值则为 initialValue,currentValue 则取数组中的第一个值。
2.如果没有提供 initialValue,那么 previousValue 取数组中的第一个值,currentValue 取数组中的第二个值。
- 每次执行callback函数的返回值会作为下一次调用callback函数的第一个参数,数组中还未被处理的第一个成员将作为第二个参数,直至最后一次调用callback函数,最终的返回结果将作为Array.reduce()的返回值
如果数组为空且未指定初始值 initialValue,则会抛出 TypeError。
如果数组仅有一个元素(无论位置如何)并且没有提供初始值 initialValue,或者有提供 initialValue 但是数组为空,那么此唯一值将被返回且 callbackfn 不会被执行。
例如:
数组求和
let sum = [0, 1, 2, 3].reduce(function (previousValue, currentValue) {
return previousValue + currentValue
}, 0)
将二维数组转化为一维
let flattened