JS基础_数组_reduce方法
reduce() 方法是 JavaScript 数组中用于累加(或归并) 操作最核心的高阶函数,它通过对数组中的每个元素执行一个提供的回调函数,将其结果汇总为单个值。 ### 核心语法 javascript array.reduce(callback(accumulator, currentValue, currentIndex, array), initialValue) 参数解析: callback: 为每个元素执行的函数,其返回值将作为下一次执行的 accumulator。 accumulator: 累计器,上一次调用回调函数时的返回值(或初始值)。 currentValue: 当前正在处理的元素。 currentIndex (可选): 当前元素的索引。 array (可选): 调用 reduce() 的数组本身。 initialValue (可选): 作为第一次调用回调函数时 accumulator 的初始值。强烈建议提供,否则当数组为空时会报错。 ### 经典累加示例 #### 1. 数字求和(最常见) javascript const numbers = [1, 2, 3, 4, 5]; // 提供初始值 0 const sum = numbers.reduce((accumulator, currentValue) => { console.log(`accumulator: ${accumulator}, currentValue: ${currentValue}`); return accumulator + currentValue; }, 0); console.log(sum); // 输出: 15 /* 执行过程: accumulator: 0, currentValue: 1 -> return 0 + 1 = 1 accumulator: 1, currentValue: 2 -> return 1 + 2 = 3 accumulator: 3, currentValue: 3 -> return 3 + 3 = 6 accumulator: 6, currentValue: 4 -> return 6 + 4 = 10 accumulator: 10, currentValue: 5 -> return 10 + 5 = 15 */ #### 2. 不提供初始值(不推荐,但需理解) javascript const numbers = [1, 2, 3, 4, 5]; const sum = numbers.reduce((acc, cur) => acc + cur); // 没有初始值 console.log(sum); // 输出: 15 /* 执行过程(自动以数组第一个元素为初始值): 第一次:acc = 1 (数组首元素), cur = 2 -> return 3 第二次:acc = 3, cur = 3 -> return 6 第三次:acc = 6, cur = 4 -> return 10 第四次:acc = 10, cur = 5 -> return 15 */ 风险: 如果数组为空且未提供初始值,会抛出 TypeError。 #### 3. 带初始值的对象累加(如统计) javascript const fruits = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']; const countMap = fruits.reduce((acc, fruit) => { acc[fruit] = (acc[fruit] || 0) + 1; // 如果键不存在,则初始化为0再+1 return acc; }, {}); // 初始值是一个空对象 console.log(countMap); // 输出: { apple: 3, banana: 2, orange: 1 } ### 总结要点 1. 核心功能:将数组“缩减”为一个值(数字、字符串、对象、新数组等)。 2. 累加器 (accumulator):它是上一次迭代的“记忆”,通过 return 语句传递给下一次迭代。 3. 初始值 (initialValue):务必提供,它决定了累加的起点和最终返回值的类型,并避免空数组报错。 4. 万能性:reduce() 不仅限于数学求和,任何“将多个值合并为一个”的操作都可以用它实现(如数组去重、扁平化、管道运算等)。 一句话理解: reduce 就像一个流水线,accumulator 是半成品,currentValue 是新零件,每次迭代加工后,将新的半成品(return 值)送入下一轮,最终产出成品。