You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中使用reduce计算二维数组每行元素和遇问题求助

二维数组行求和的reduce实现问题分析

你的reduce代码无法正常运行的核心原因是:Array.push()方法返回的是数组的新长度,而非数组本身。外层reduce的累加器在第一次调用push后变成了数字,后续迭代时试图对数字调用push方法,直接抛出错误。

错误代码的问题拆解

以示例输入[[4, 5, 6], [6, 5, 4], [5, 5, 5]]为例:

  1. 第一次迭代:累加器rowSums是空数组,push(15)返回数字1,外层reduce将这个数字作为下一次的累加器。
  2. 第二次迭代:尝试对数字1调用push方法,此时会抛出TypeError: rowSums.push is not a function,代码中断。

正确的reduce实现方式

有两种可靠的写法,都能和原for循环实现相同的效果:

方式1:先push再返回原累加器数组(性能更优)

const rowSums = matrix.reduce((rowSums, currentRow) => {
    // 计算当前行的和并推入结果数组
    rowSums.push(currentRow.reduce((sum, currentEl) => sum + currentEl, 0));
    // 返回原数组作为下一次迭代的累加器
    return rowSums;
}, []);

方式2:返回新数组(不修改原累加器,更符合函数式编程风格)

const rowSums = matrix.reduce((rowSums, currentRow) => {
    const currentRowSum = currentRow.reduce((sum, currentEl) => sum + currentEl, 0);
    // 展开原数组并添加新的行和,返回新数组
    return [...rowSums, currentRowSum];
}, []);

两种方式对示例输入的输出结果均为[15, 15, 15],和原for循环的执行结果完全一致。

内容的提问来源于stack exchange,提问作者Math Student

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 13:48:24