11

这都是在一个更大的程序的上下文中,所以我会尽量保持简单,只显示有问题的行。我有一个值数组,它们是字符串形式的数字,例如“84”、“32”等。

然而这条线

console.log(unsolved.length + " " + unsolved[0] + " " + parseInt(unsolved[0]) + " " + parseInt("84"));

印刷:

4 "84" NaN 84

“84”是我试图解析的数组元素!然而,除非我将它从数组的上下文中取出并明确写入,否则它不会起作用。这是怎么回事?

4

4 回答 4

11

您可以尝试使用此函数从要处理的字符串中删除引号:

function stripAlphaChars(source) { 
  var out = source.replace(/[^0-9]/g, ''); 

  return out; 
}

此外,您应该明确指定要解析以 10 为基数的数字:

parseInt(unsolved[0], 10);
于 2012-06-20T13:47:20.367 回答
7

parseInt会从它的论点开始的一切看起来像一个数字,而忽略其余的。在您的情况下,您调用它的参数以 开头",所以没有任何东西看起来像一个数字,它会尝试转换一个空字符串,这实际上不是一个数字。

于 2012-06-20T13:47:07.837 回答
3

您应该确保数组元素确实是一个可以解析为数字的字符串。您的数组元素不包含 value '84',但实际上是 value '"84"'(包含由 " 封装的数字的字符串)

您需要"从数组元素中删除 ,可能像这样:

function removeQuotationMarks(string) {
  return (typeof string === 'string') ? string.replace(/"|'/g, '') : string;
}

unsolved = unsolved.map(removeQuotationMarks);

现在所有的数组元素都应该准备好被解析了parseInt(unsolved[x], 10)

于 2012-06-20T13:55:46.850 回答
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

于 2018-02-08T05:14:30.587 回答