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

含美元符号与逗号的金额字符串转整数求和出现NaN问题排查

问题分析与解决

嘿,我来帮你揪出导致结果为NaN的问题!

你遇到的核心问题在于对film.gross字符串的处理不彻底:

  • 你的replace(",", "")只会替换第一个逗号,剩下的逗号还留在字符串里
  • 字符串开头的$符号完全没处理

当parseInt遇到$或者未被替换的逗号时,它无法解析出有效的数字,会直接返回NaN。而一旦你把NaN和result累加,整个结果就会变成NaN,这就是你看到的现象。

修正方案

我们需要一次性去掉所有的$和逗号,再把处理后的字符串转换成数字。这里用正则表达式的全局匹配就能搞定:

修正后的forEach版本

const bondFilms = [/* 数组元素内容 */];
let result = 0;
bondFilms.forEach((film)=>{
  // 全局匹配$和逗号,全部替换为空,再转成数字
  const cleanGross = film.gross.replace(/[$,]/g, "");
  result += Number(cleanGross);
});
console.log(result);

更简洁的reduce版本

如果你喜欢更函数式的写法,用reduce可以一步完成累加:

const bondFilms = [/* 数组元素内容 */];
const totalGross = bondFilms.reduce((total, film) => {
  return total + Number(film.gross.replace(/[$,]/g, ""));
}, 0);
console.log(totalGross);

这里用Number()转换比parseInt更稳妥,因为它能完整解析整个数字字符串,不会因为意外的非数字字符提前终止解析(当然我们已经处理掉了所有非数字字符)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:44:35