JavaScript使用reduce计算商品价格总和返回undefined问题求助
问题根因
代码最终得到undefined是两处错误共同导致的:
- 属性名笔误:累加价格时写了不存在的属性
a.pricex,正确属性为a.price。即便遍历到价格为数字的商品,读取a.pricex只会得到undefined,和数字做加法会直接得到NaN。 - 条件分支缺失返回值:
reduce的回调要求每一次执行都必须返回下一轮迭代使用的累加值,你只在价格为数字类型的分支写了返回逻辑,遇到价格是空格、空字符串的商品时,函数没有显式返回值,默认返回undefined,直接打断累加流程,最终返回结果异常。
正确实现
修正笔误、补全非数字价格分支的返回逻辑即可:
const productsg = [ { product: 'banana', price: 3 }, { product: 'mango', price: 6 }, { product: 'potato', price: ' ' }, { product: 'avocado', price: 8 }, { product: 'coffee', price: 10 }, { product: 'tea', price: '' }, ] const num = productsg.reduce((acc, item) => { // 价格为数字类型才累加,否则直接保留当前累加值进入下一轮 return typeof item.price === 'number' ? acc + item.price : acc }, 0) console.log(num) // 运行输出27,即3+6+8+10的正确结果
内容的提问来源于stack exchange,提问作者girish varlyani
相关产品推荐
相关产品推荐

