在 JavaScript 中,reduce() 是数组的一个强大方法,用于将数组“归约”为一个单一的值。但很多初学者常困惑:reduce 后面到底该加什么?本文将为你详细解答。
Array.prototype.reduce() 方法对数组中的每个元素执行一个“reducer”函数(升序执行),将其结果汇总为单个返回值。
array.reduce(callback(accumulator, currentValue, index, array), initialValue)
accumulator:累计器,上一次调用回调的返回值,或初始值(initialValue)currentValue:当前正在处理的数组元素index(可选):当前元素的索引array(可选):原数组callback 的第一个参数的值。若未提供,则使用数组第一个元素。const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, curr) => acc + curr, 0);
console.log(sum); // 输出: 10
const users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' }
];
const userMap = users.reduce((acc, user) => {
acc[user.id] = user;
return acc;
}, {});
console.log(userMap);
// { 1: { id: 1, name: 'Alice' }, 2: { id: 2, name: 'Bob' } }
const fruits = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple'];
const count = fruits.reduce((acc, fruit) => {
acc[fruit] = (acc[fruit] || 0) + 1;
return acc;
}, {});
console.log(count);
// { apple: 3, banana: 2, orange: 1 }
答案是:一个回调函数(reducer),通常还建议加上 初始值(initialValue)。
例如:
// ✅ 推荐写法:明确传入初始值
arr.reduce((acc, item) => { ... }, initialValue)
// ⚠️ 不推荐(除非你清楚后果):
arr.reduce((acc, item) => { ... })
不传 initialValue 时,reduce 会以数组第一项为初始值,从第二项开始遍历,容易引发错误(如空数组报错)。
reduce() 且未提供 initialValue 会抛出错误。accumulator,否则后续迭代会出错。reduce 中做副作用操作(如修改外部变量),保持函数纯净更安全。reduce 后面应加:一个回调函数 +(推荐)初始值。掌握它,你就能高效地处理数组归约、转换、统计等任务。