JavaScript中Cash类实例数组sumproduct累加求和实现咨询
问题排查与正确实现
原有代码的错误点
- 语法错误:
- JS类声明关键字为小写
class,而非大写Class money数组不能直接声明在Cash类的定义内部,需放到类外部- 所有
push方法调用均缺少闭合括号,new Cash(50,4)后要补右括号
- JS类声明关键字为小写
- 循环逻辑错误:
- 循环条件写反,
i > money.length初始状态就不成立,循环完全不会执行 - 循环内额外使用
i++会导致索引异常跳变,且没有定义累加变量存储计算结果,计算值直接被丢弃
- 循环条件写反,
修正后的基础代码
// 定义Cash类 class Cash { constructor(v, q) { this.value = v; this.quantity = q; } } // 初始化money数组 const money = []; money.push(new Cash(50, 4)); money.push(new Cash(20, 4)); money.push(new Cash(10, 2));
累加逻辑实现
方法1:普通for循环实现(兼容性最好)
let total = 0; // 循环条件为i小于数组长度,遍历每一个元素 for (let i = 0; i < money.length; i++) { // 每次循环累加当前项的乘积到total total += money[i].value * money[i].quantity; } console.log(total); // 输出300
方法2:数组reduce方法实现(写法更简洁)
reduce是JS数组专门用来做累计计算的原生方法,天然适配任意长度的数组:
const total = money.reduce((sum, currentItem) => { return sum + currentItem.value * currentItem.quantity; }, 0); // 第二个参数0是累加初始值 console.log(total); // 输出300
两种方法都可以适配任意长度的money数组,后续新增Cash实例push到数组后,重新执行计算逻辑即可得到正确的总和。
内容的提问来源于stack exchange,提问作者Juan Ardila
相关产品推荐
相关产品推荐

