值为0时的javascript parseInt

值为0时的javascript parseInt,javascript,jquery,Javascript,Jquery,我使用jquery.grep清理字符串并只返回数字 这就是我所拥有的: var TheInputArray = TheInput.slice(); var TheCleanInput = jQuery.grep(TheInputArray, function (a) { return parseInt(a, 10); }); 我获取一个字符串,将其拆分为一个数组,并使用parseInt函数检查它是否是一个数字。问题是当a的值为0时,它跳过该元素。我需要做哪些更改才能使此代码正常工作 谢谢。

我使用jquery.grep清理字符串并只返回数字

这就是我所拥有的:

var TheInputArray = TheInput.slice();
var TheCleanInput = jQuery.grep(TheInputArray, function (a) {
  return parseInt(a, 10);
});
我获取一个字符串,将其拆分为一个数组,并使用parseInt函数检查它是否是一个数字。问题是当a的值为0时,它跳过该元素。我需要做哪些更改才能使此代码正常工作


谢谢。

如果您只想测试数组中的元素是否为数字,而不是将其转换,然后使用转换后的数字构建新数组,则可以使用新函数(1.7中新增),该函数测试参数是否表示数值:

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

请注意,这不会修改现有阵列。如果数组包含
'5'
,则该数组将保留为字符串,不会转换为数字。如果需要,请使用
$.map

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

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

您可以使用正则表达式:

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

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

var TheInputArray = TheInput.slice();
var TheCleanInput = jQuery.grep(TheInputArray, function (a) {
  return ! isNaN(parseInt(a, 10));
});
parseInt
如果无法解析输入,则返回
NaN
(不是数字)。如果参数为
NaN
,则
isNan()将返回
true
。因此,这应该有助于您检测这种情况。

函数不返回布尔值,它要么返回非数值的
NaN
,要么返回数值的转换值。如果您尝试将结果用作布尔值,您会发现
NaN
和0都将是falsy,而任何非零数都将等价于true

您可以使用
isNan()
检查此项:
return!isNan(parseInt(a,10))

或者您可以使用jQuery的函数(如果使用jQuery 1.7+)

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

TheInput.replace(/\D/g,"")
即使您特别希望将结果作为数组,我认为您最好使用正则表达式,然后再转换为数组,因为这样可以使代码简单。

请参阅

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