如何用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
相关产品推荐
相关产品推荐

