这完全是在一个更大的程序的背景下,所以我会尝试保持简单,只显示有问题的行。我有一个数组的数组,字符串形式的数字为“84”,“32”等。
然而这条线
console.log(unsolved.length + " " + unsolved[0] + " " + parseInt(unsolved[0]) + " " + parseInt("84"));
打印:
4 "84" NaN 84
“84”是我试图解析的数组元素!然而,除非我把它从数组的上下文中删除并明确地写出来,否则它将无法工作。发生了什么事?
答案 0 :(得分:11)
您可以尝试使用此函数从要处理的字符串中删除引号:
function stripAlphaChars(source) {
var out = source.replace(/[^0-9]/g, '');
return out;
}
此外,您应明确指定要解析基数为10的数字:
parseInt(unsolved[0], 10);
答案 1 :(得分:7)
parseInt
将从其参数的开头看起来像一个数字,并忽略其余部分。在你的情况下,你调用它的参数以"
开头,所以没有任何东西看起来像一个数字,它试图转换一个空字符串,这实际上不是一个数字。
答案 2 :(得分:3)
您应该确保数组元素确实是一个可以解析为数字的字符串。您的数组元素不包含值'84'
,但实际上是值'"84"'
(包含由“”封装的数字的字符串)
您需要从数组元素中删除"
,如下所示:
function removeQuotationMarks(string) {
return (typeof string === 'string') ? string.replace(/"|'/g, '') : string;
}
unsolved = unsolved.map(removeQuotationMarks);
现在所有数组元素都应该可以使用parseInt(unsolved[x], 10)
答案 3 :(得分:0)
首先,我们需要使用正则表达式替换“给”数据并替换,然后我们需要进行强制转换。
var i = 1;
var j = "22"
function stringToNumber(n) {
return (typeof n === 'string') ? parseInt(Number(n.replace(/"|'/g, ''))) : n;
}
console.log(stringToNumber(i)); // 1
console.log(stringToNumber(j)); // 22