reduce 后面加什么?

在 JavaScript 中,reduce() 是数组的一个强大方法,用于将数组“归约”为一个单一的值。但很多初学者常困惑:reduce 后面到底该加什么?本文将为你详细解答。

什么是 reduce()?

Array.prototype.reduce() 方法对数组中的每个元素执行一个“reducer”函数(升序执行),将其结果汇总为单个返回值。

基本语法

array.reduce(callback(accumulator, currentValue, index, array), initialValue)

参数说明

常见用法示例

1. 求数组总和

const numbers = [1, 2, 3, 4];

const sum = numbers.reduce((acc, curr) => acc + curr, 0);

console.log(sum); // 输出: 10

2. 将数组转为对象(按 ID 索引)

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' } }

3. 统计数组中各元素出现次数

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 }

reduce 后面加什么?

答案是:一个回调函数(reducer),通常还建议加上 初始值(initialValue)

例如:

// ✅ 推荐写法:明确传入初始值

arr.reduce((acc, item) => { ... }, initialValue)



// ⚠️ 不推荐(除非你清楚后果):

arr.reduce((acc, item) => { ... })

不传 initialValue 时,reduce 会以数组第一项为初始值,从第二项开始遍历,容易引发错误(如空数组报错)。

注意事项

总结

reduce 后面应加:一个回调函数 +(推荐)初始值。掌握它,你就能高效地处理数组归约、转换、统计等任务。