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

如何用forEach或reduce遍历多维数组,实现二维数组元素乘积计算?

用forEach或reduce实现二维数组元素总乘积

方案1:嵌套forEach实现

这个方案和你原有的嵌套for循环逻辑完全一致,只是用forEach替代了手动管理索引的循环,代码更简洁易读:

function twoDimensionalProduct(array) {
  let prod = 1;
  // 遍历外层数组的每个子数组
  array.forEach(subArr => {
    // 遍历子数组的每个元素并累乘
    subArr.forEach(num => {
      prod *= num;
    });
  });
  return prod;
}

const arra1 = [
  [6, 4],
  [5],
  [3, 1]
];
console.log(twoDimensionalProduct(arra1)); // 360

方案2:嵌套reduce实现(最优函数式方案)

reduce是更贴合现代JavaScript函数式编程风格的写法,不需要额外的外部变量存储乘积,全程通过累加器完成计算,代码更紧凑且无副作用:

function twoDimensionalProduct(array) {
  // 外层reduce计算总乘积,初始值为1(乘法单位元)
  return array.reduce((totalProd, subArr) => {
    // 内层reduce计算当前子数组的元素乘积
    const subProd = subArr.reduce((acc, num) => acc * num, 1);
    return totalProd * subProd;
  }, 1);
}

const arra1 = [
  [6, 4],
  [5],
  [3, 1]
];
console.log(twoDimensionalProduct(arra1)); // 360

如果追求极致简洁,还可以写成一行:

const twoDimensionalProduct = array => array.reduce((total, sub) => total * sub.reduce((acc, num) => acc * num, 1), 1);

方案对比

  • forEach方案:逻辑直观,和原循环的思维模式最接近,适合需要清晰调试步骤、习惯命令式编程的场景。
  • reduce方案:代码更紧凑,无额外状态变量,符合函数式编程的纯净性,是更优的现代JS实现方式。

内容的提问来源于stack exchange,提问作者Leslie O

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:35:49