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

