含美元符号与逗号的金额字符串转整数求和出现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
相关产品推荐
相关产品推荐

