You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅用Reduce(callback)实现产品数组价格求和与最大值提取

实现说明

需要基于给定产品数组完成两个计算逻辑:

  • 仅使用reduce()方法计算所有有效产品价格的总和
  • 提取价格字段中的最大有效数值
    测试用基础数组如下:
const products = [
  { product: 'banana', price: 3 },
  { product: 'mango', price: 6 },
  { product: 'potato', price: ' ' },
  { product: 'avocado', price: 8 },
  { product: 'coffee', price: 10 },
  { product: 'tea', price: '' },
]
原有代码问题排查

你之前写的求和代码运行结果异常,原因有两点:

  • reduce回调参数语义理解错误:第一个参数是遍历过程中的累计值,第二个参数是当前遍历到的完整产品对象,不是单独的价格字段,直接将累计值和对象相加会触发隐式类型转换,输出非预期结果
  • 未做无效价格过滤:数组中存在空格字符串、空字符串格式的无效价格,直接参与计算会导致结果错乱
可运行实现代码

1. 仅用reduce计算有效价格总和

const sum = products.reduce((total, currentProduct) => {
  // 统一处理价格值:转字符串、去首尾空白、转数字
  const price = Number(currentProduct.price.toString().trim())
  // 仅有效数字参与累加,无效值按0计算
  return total + (isNaN(price) ? 0 : price)
}, 0)

console.log(sum) // 输出:27

2. 提取最大有效价格

同样可以通过reduce一次遍历完成计算,不需要额外使用filter/forEach:

const maxPrice = products.reduce((currentMax, currentProduct) => {
  const price = Number(currentProduct.price.toString().trim())
  // 无效价格直接返回当前已记录的最大值
  if (isNaN(price)) return currentMax
  // 当前价格更大则更新最大值,否则保留原有值
  return price > currentMax ? price : currentMax
}, 0)

console.log(maxPrice) // 输出:10
注意事项
  • 使用reduce时建议始终传入初始值(即方法的第二个参数),避免空数组遍历报错,同时保证累计值类型符合预期
  • 处理混合类型的数值字段时,必须先做类型转换和有效性校验,过滤掉空值、空白字符串、非数字值,避免隐式类型转换导致的计算错误

内容的提问来源于stack exchange,提问作者ashrth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 20:03:24