值为0时的javascript parseInt
我使用jquery.grep清理字符串并只返回数字 这就是我所拥有的:值为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时,它跳过该元素。我需要做哪些更改才能使此代码正常工作 谢谢。
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;
}