当值= 0时,javascript parseInt

时间:2011-11-16 23:39:03

标签: javascript jquery

我正在使用jquery.grep来清理字符串并仅返回数字。

这就是我所拥有的:

var TheInputArray = TheInput.slice();
var TheCleanInput = jQuery.grep(TheInputArray, function (a) {
  return parseInt(a, 10);
});

我取一个字符串,将其拆分为一个数组并使用parseInt函数检查它是否为数字。问题是当a的值为0时,它会跳过该元素。要使此代码有效,我需要做些哪些更改?

感谢。

6 个答案:

答案 0 :(得分:4)

不幸的是,Javascript中的0是假的。因此,您需要确保返回值为true,即使对于0

也是如此
var TheInputArray = TheInput.slice();
var TheCleanInput = jQuery.grep(TheInputArray, function (a) {
  return ! isNaN(parseInt(a, 10));
});
如果

parseInt无法解析输入,则返回NaN(不是数字)。如果参数为isNan()true将返回NaN。所以这应该可以帮助你发现这种情况。

答案 1 :(得分:3)

您可以使用正则表达式:

var TheCleanInput = TheInput.replace(/\D/g, '');

答案 2 :(得分:1)

如果您只想测试数组中的元素是否为数字,而不是转换它,然后使用转换后的数字构建新数组,则可以使用新的{{3} } function(1.7中的新增功能),用于测试参数是否表示数值:

var TheCleanInput = jQuery.grep(TheInputArray, function (a) { return $.isNumeric(a); });

请注意,修改现有数组。如果数组包含'5',那么它将保持字符串而不会转换为数字。如果那是您想要的,请使用$.map

答案 3 :(得分:1)

parseInt()函数不返回布尔值,它返回NaN表示非数字值或转换后的数值值。如果您尝试将结果用作布尔值,您会发现NaN和0都将是假的,而任何非零数字都将等于true。

您可以使用isNan()进行检查:return !isNan(parseInt(a,10));

或者您可以使用jQuery的$.isNumeric(a)函数(如果使用jQuery 1.7 +)。

或者,如果您只想从字符串中删除所有非数字字符,为什么不使用正则表达式替换:

TheInput.replace(/\D/g,"")

即使您特别希望将结果作为数组,我认为您最好使用正则表达式然后转换为数组,因为它可以使代码保持简单。

答案 4 :(得分:0)

如果您使用的是当前版本的jQuery(1.7),则可以将jQuery.isNumeric(a)用于此目的:

var TheCleanInput = jQuery.grep(TheInputArray, function (a) { return $.isNumeric(a); });

答案 5 :(得分:0)

请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

var filterInt = function(value) {
  if (/^(\-|\+)?([0-9]+|Infinity)$/.test(value))
    return Number(value);
  return NaN;
}