2011-11-16 72 views
2

我正在使用jquery.grep来清理一个字符串,并只返回数字。JavaScript parseInt当值= 0

这是我有:

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

我一个字符串,将它分成数组,并使用parseInt函数来检查它是否是一个数字。问题是,当a的值为0时,它会跳过该元素。我需要做些什么才能使此代码有效?

谢谢。

回答

2

您可以使用正则表达式Javascript是虚伪的。所以你需要确保你的返回值是true,即使是0

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

parseInt返回NaN(非数字),如果失败来解析输入。如果参数是NaNisNan()将返回true。所以这应该可以帮助你发现这种情况。

1

如果你只是想测试阵列的元素是否为一个数字,而不是将其转换,然后构建使用转换的数字的新的数组,你可以使用新的$.isNumeric功能(新的1.7),它测试参数是否表示一个数值:

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

注意这并没有修改现有的阵列。如果数组包含'5',则该数组将保留一个字符串并且不会转换为数字。如果这就是你想要的,使用$.map

0

如果你正在使用jQuery的当前版本(1.7),你可以使用jQuery.isNumeric(a)用于这一目的:在

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

不幸的是,0

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

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

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

或者你也可以使用jQuery的$.isNumeric(a)函数,而不是(如果使用jQuery 1.7+)。

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

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

即使你特别想要的结果为数组,我认为你最好使用正则表达式,然后转换为数组,因为它使代码简单。

相关问题