请用 JavaScript 的 reduce 方法完成数组求和,并给出可运行的代码示例。
考察说明
考察对 Array.prototype.reduce 用法及回调参数的理解。
回答思路
- 【回答框架 1】reduce 接收一个回调函数和一个初始值,回调有四个参数,分别代表累加器、当前值、当前索引和原数组,这里求和只需要前两个。
- 【回答框架 2】求和时初始值设为 0,回调返回累加器加当前值,最终 reduce 返回累加结果,例如 [1,2,3].reduce((acc,cur)=>acc+cur,0) 得到 6。
- 【回答框架 3】如果不提供初始值,第一次调用会使用数组第一个元素作为累加器,从第二个元素开始遍历,空数组时直接报错,因此最好显式传入初始值 0。
- 【回答框架 4】代码可以写成 const sum = arr.reduce((acc, cur) => acc + cur, 0); 注意回调中箭头函数省略了 return,若用普通函数则需要写 return acc + cur;。
- 【回答框架 5】在实际项目中可以结合初始值避免类型问题,比如处理数字数组时确保每一项都是数值,否则可能得到字符串拼接结果。
- 【关键点 1】reduce 的累加器与当前值参与求和,初始值须显式设为 0。
- 【关键点 2】不传初始值时,空数组会抛 TypeError,建议总是提供初始值。
- 【关键点 3】返回值是累加器最终值,不改变原数组。
- 【易错点 1】使用回调时若漏写 return 或初始值,会导致结果错误或类型异常。
- 【易错点 2】用 reduce 直接求和时,数组元素必须为数值,否则会出现字符串拼接或 NaN。
- 【易错点 3】不要将 reduce 用于未初始化的稀疏数组,可能跳过空槽,结果不符合预期。