我有一个简单的问题,但我坚持使用它:我想转换一个整数和字符串列表,并返回一个新的列表,过滤掉字符串:
例如:([99,5,'love','hate']) == [99,5]
我使用了.filter
但也过滤了零。什么是最好的选择?
function filter(l) {
var arr = l.filter(Number);
return arr;
}
答案 0 :(得分:7)
您可以将.filter()
与您自己的功能一起使用:
function filter(l) {
var arr = l.filter(function(n) {
return typeof n === "number";
});
return arr;
}
请注意,使用Number构造函数时,您将包含数字以及可以成功转换为数字的任何值。包含这些东西有点棘手,因为Number构造函数总是返回一个数字。值可能是NaN
,但事实上NaN
实际上是一个数字,尽管它本身坚持它不是。
答案 1 :(得分:1)
如果您想严格过滤掉整数,请尝试使用这些辅助函数和Array.filter:
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
function isInt(n) {
return isNumber(n) && n % 1 === 0;
}
上试试这些
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
function isInt(n) {
return isNumber(n) && n % 1 === 0;
}
var array = [99,5,'love','hate'];
var result = array.filter(function(x) {
return isInt(x);
});
document.querySelector('#output').innerHTML = JSON.stringify(result, null, 4);

Array: [99,5,'love','hate']
<br/>Result: <pre id="output"></pre>
&#13;
编辑:这也会导致返回整数字符串表示的副作用 - 因此[99,5,'love','hate', '23']
将返回[99, 5, '23']
,这可能不是您想要的。< / p>