reduce() 方法对数组的每个元素依次执行自定义回调函数,返回值为回调函数 return 的处理结果。 先看一个示例:
const arr = [1, 2, 3, 4];
const reduceFn = (accumulator, currentVal) => accumulator + currentVal;
console.log(arr.reduce(reduceFn));// 10
console.log(arr.reduce(reduceFn, 5));// 15
语法:
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
参数
方法接收两个参数:
- callback() 回调函数。其接收四个参数:
- accumulator:累计器,累计回调函数的值。
- current value:当前值。
- current index: 当前值的索引。(可选)
- souce map: 源数组,也就是调用 reduce() 方法的数组。(可选)
- initVal: 初始值。(可选)
返回值
回调函数累计处理的结果。
注意
如果传递 initVal,则
- accumulator 累计器为 initVal, 不传递则为数组的第一项。
- currentVal 当前值为数组第一项,不传递则为数组第二项。
- currentIndex 当前索引为数组第一项的索引 0,不传递则为 1。
当给空数组调用 reduce 方法,且不传递初始值时,将报错。 如果数组仅有一个元素,且没有提供初始值,或者提供了初始值,但数组为空,会将唯一值返回,并且 callback 不再执行。
示例代码:
// 将加了千分号的数字的逗号去掉
var arr = "11,331,200.00".split("");
var newArr = arr.reduce((acc, current) => {
if (current !== ",") {
acc.push(current);
}
return acc;
}, []);
console.log(newArr.join(""));
应用场景列举
- 数组求和
- 二维数组转为一维数组
- 统计数组中字符出现的次数
- 数组去重
更多 reduce 的使用示例可访问 MDN 之 reduce