reduce()
是 JavaScript 中数组的一个高阶函数,用于将数组中的所有元素通过某种方式汇总成一个单一的值。它的基本用法是通过提供一个回调函数,回调函数接收四个参数:accumulator
(累积器)、currentValue
(当前值)、currentIndex
(当前索引)、array
(原数组)。其中,accumulator
用来保存每次迭代的结果,而 currentValue
则是当前迭代项的值。
语法:#
array.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
callback
: 执行的回调函数,接收四个参数:accumulator
: 上一次回调函数返回的值,或者是初始值(initialValue
)。currentValue
: 当前正在处理的数组元素。index
: 当前元素的索引(从 0 开始)。array
: 被操作的原数组。
initialValue
(可选):指定第一次调用回调函数时accumulator
的初始值。如果没有提供initialValue
,则默认accumulator
的初始值为数组的第一个元素,currentValue
从数组的第二个元素开始。
示例 1:求数组元素的和#
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, currentValue) => {
return accumulator + currentValue;
}, 0); // 0 是初始值
console.log(sum); // 15
示例 2:数组去重#
const numbers = [1, 2, 3, 4, 3, 2, 1];
const uniqueNumbers = numbers.reduce((accumulator, currentValue) => {
if (!accumulator.includes(currentValue)) {
accumulator.push(currentValue);
}
return accumulator;
}, []);
console.log(uniqueNumbers); // [1, 2, 3, 4]
示例 3:计算数组中每个元素的出现次数#
const fruits = ['apple', 'banana', 'apple', 'orange', 'banana', 'banana'];
const fruitCount = fruits.reduce((accumulator, currentValue) => {
if (accumulator[currentValue]) {
accumulator[currentValue] += 1;
} else {
accumulator[currentValue] = 1;
}
return accumulator;
}, {});
console.log(fruitCount); // { apple: 2, banana: 3, orange: 1 }
示例 4:链式操作#
const numbers = [1, 2, 3, 4];
const result = numbers
.reduce((acc, currentValue) => acc + currentValue, 0)
.toString()
.split('')
.reverse()
.join('');
console.log(result); // "10" (数字 10 被反转成 "01")
总结#
reduce()
是一个非常强大的方法,适用于各种场景,如数组聚合、转换、计数等。它能将复杂的操作简化为一行代码,但要注意初学者可能会觉得它有点抽象。