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

使用JavaScript的reduce方法筛选数值价格并计算正确总和

解决JavaScript数组reduce累加价格时跳过非数值的问题

你遇到的问题是因为'NA'是字符串类型,JavaScript的+运算符在遇到字符串时会执行字符串拼接而非数值累加,所以原本的数值会被转成字符串和'NA'拼接,最终得到245NA9530这种错误结果。

要实现跳过非数值价格、仅累加有效数值的需求,可以在reduce的回调函数中增加判断逻辑,只对有效数值进行累加:

方案一:仅判断数值类型(适合确定非数值都是字符串标记的场景)

let shoes = [
    { id:205, name:'reebok', price:50 },
    { id:206, name:'adidas', price:45 },
    { id:207, name:'nike', price:150 },
    { id:207, name:'sparx', price:'NA' },
    { id:208, name:'clarks', price:95 },
    { id:209, name:'bata', price:30 },
];

const totalPrice = shoes.reduce((sum, { price }) => {
  // 只累加类型为number的价格,跳过非数值的'NA'
  return typeof price === 'number' ? sum + price : sum;
}, 0);

console.log(totalPrice); // 输出370

方案二:兼容可转换为数值的字符串(更通用)

如果你的数组中可能出现字符串形式的有效价格(比如price: '120'),可以用Number()转换后判断是否为有效数值,这种方式会跳过'NA'这类无法转换为数值的标记:

const totalPrice = shoes.reduce((sum, { price }) => {
  const convertedPrice = Number(price);
  // 仅当转换后是有效数值时才累加
  return !isNaN(convertedPrice) ? sum + convertedPrice : sum;
}, 0);

console.log(totalPrice); // 输出370

关键逻辑说明

  • 方案一通过typeof price === 'number'严格判断价格的类型,只处理原本就是数值的项;
  • 方案二通过Number()尝试转换价格,再用!isNaN()判断转换结果是否为有效数值,能兼容更多场景;
  • 两种方案都避免了字符串拼接的问题,确保累加的都是数值类型,最终得到正确的总价370。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:22:16