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

如何用ES6箭头函数在forEach循环中结合取模实现数组奇数乘积?

用ES6箭头函数实现数组奇数乘积的方法

嘿,很高兴看到你已经在尝试ES6的箭头函数啦!我来帮你把这个数组奇数乘积的功能用箭头函数搭配forEach实现,同时也会给你最简洁的写法。

首先先明确我们的核心目标:计算数组中所有奇数的乘积,你之前的代码是打印偶数,我们先把逻辑调整过来。

1. 在forEach的箭头函数中加入if判断

在箭头函数里写if语句其实很简单,只要把箭头函数的函数体用大括号{}包裹起来,就可以像传统函数一样写条件判断了:

const odds = [ 2, 3, 6, 7, 8 ];
const oddProduct = (arr) => {
  let product = 1; // 初始化乘积为1,因为乘1不会改变结果
  arr.forEach((element) => {
    if (element % 2 !== 0) { // 判断当前元素是否为奇数
      product *= element; // 累乘奇数到product中
    }
  });
  return product; // 返回最终的乘积结果
};

console.log(oddProduct(odds)); // 输出:21(3*7的结果)

这个写法和你熟悉的传统函数逻辑一致,只是把forEach的回调换成了箭头函数,语法更简洁利落。

2. 最简洁的写法:用reduce替代forEach

其实forEach更适合做遍历执行操作,而计算乘积这种聚合类的需求,用reduce方法会更优雅、更贴合场景。结合箭头函数可以直接写成一行:

const odds = [ 2, 3, 6, 7, 8 ];
const oddProduct = (arr) => 
  arr.reduce((acc, curr) => curr % 2 !== 0 ? acc * curr : acc, 1);

console.log(oddProduct(odds)); // 输出:21

这里的逻辑拆解:

  • reduce的第一个参数是箭头函数,acc是累加器(这里用来存储乘积),curr是当前遍历的元素
  • 用三元表达式做判断:如果当前元素是奇数,就把累加器和当前元素相乘;否则保持累加器不变
  • 第二个参数1是累加器的初始值,保证乘积从正确的起点开始计算

3. 更紧凑的forEach写法(可选)

如果一定要用forEach,也可以利用逻辑与&&的短路特性,把if判断简化成一行:

const odds = [ 2, 3, 6, 7, 8 ];
const oddProduct = (arr) => {
  let product = 1;
  arr.forEach(element => element % 2 !== 0 && (product *= element));
  return product;
};

这个写法的原理是:只有当element % 2 !== 0为真时,才会执行后面的product *= element,相当于简化版的if语句,不过可读性会稍弱一些,建议根据场景选择使用。

内容的提问来源于stack exchange,提问作者Stefan Rows

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:14:52