我正在使用jquery.grep来清理字符串并仅返回数字。
这就是我所拥有的:
var TheInputArray = TheInput.slice();
var TheCleanInput = jQuery.grep(TheInputArray, function (a) {
return parseInt(a, 10);
});
我取一个字符串,将其拆分为一个数组并使用parseInt函数检查它是否为数字。问题是当a的值为0时,它会跳过该元素。要使此代码有效,我需要做些哪些更改?
感谢。
答案 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;
}