使用reduce乘法归约数组得0异常,求数组转单值的其他方法
数组元素相乘归约为单个数字的问题解决方法
你的代码输出0是因为reduce的初始值设为了0——乘法运算中0和任何数相乘结果都是0,整个归约过程从一开始就被置0,自然得不到正确的乘积。
修正后的reduce写法
把初始值改为1(乘法的单位元)即可得到正确结果:
let numbs = [1, 2, 3, 4, 5, 6, 7, 8]; let reducedNumb = numbs.reduce((prevVal, currVal) => prevVal * currVal, 1); console.log(reducedNumb); // 输出40320
其他实现方法
- for循环遍历计算
手动遍历数组,逐个累积乘积:
let numbs = [1, 2, 3, 4, 5, 6, 7, 8]; let result = 1; for (let i = 0; i < numbs.length; i++) { result *= numbs[i]; } console.log(result); // 输出40320
- forEach遍历
通过forEach循环完成乘积累积:
let numbs = [1, 2, 3, 4, 5, 6, 7, 8]; let result = 1; numbs.forEach(num => { result *= num; }); console.log(result); // 输出40320
- eval拼接表达式(谨慎使用)
将数组元素拼接成乘法表达式后用eval执行,注意:若数组含非数字元素会报错,且eval存在安全风险,仅在确定数组内容安全时使用:
let numbs = [1, 2, 3, 4, 5, 6, 7, 8]; let result = eval(numbs.join('*')); console.log(result); // 输出40320
内容的提问来源于stack exchange,提问作者user21738272
相关产品推荐
相关产品推荐

