如何在函数内将数组reduce求和关联至不可修改的total变量?(JS)
问题分析与解决方案
你的代码有两个关键问题导致无法正确更新total变量:
- 你调用
reduce时用了全局的shoppingCart,但函数参数是prices——这会让函数失去通用性,传入其他数组时根本不会生效。 reduce方法本身会返回最终的求和结果,但你没有把这个结果赋值给外部的total变量,所以外部的total始终停留在初始的0。
另外,虽然数组非空时reduce可以省略初始值,但显式传入初始值0会让代码更健壮(比如处理空数组时不会抛出错误)。
修正后的代码
var shoppingCart = [20, 15]; function getTotalCost(prices){ let total = 0; // code below total = prices.reduce((acc, amount) => acc + amount, 0); // code above return total; } getTotalCost(shoppingCart);
关键细节说明
- 改用
prices.reduce而非shoppingCart.reduce:让函数依赖传入的参数而非全局变量,符合函数的封装性和复用性要求。 - 将
reduce的返回值赋值给total:reduce回调里的acc是迭代时的累加器,每次迭代都会返回新的累加值,最终reduce整体会输出总和,把这个结果赋值给外部的total,就能让函数返回正确的计算结果。 - 传入初始值
0:确保即使传入空数组,函数也能返回合理的0,而不是抛出异常。
如果因为特殊需求必须依赖全局的shoppingCart(不推荐,会破坏函数纯特性),也可以把赋值语句改成total = shoppingCart.reduce((acc, amount) => acc + amount, 0);,但还是优先推荐使用函数参数的写法。
内容的提问来源于stack exchange,提问作者Dylan L
相关产品推荐
相关产品推荐

