Array.filter 个数字加零

Array.filter numbers plus zero

我有一个简单的问题,但我坚持不懈:我想转换一个整数和字符串列表,并 returns 一个过滤掉字符串的新列表:

例如:([99,5,'love','hate']) == [99,5]

我使用了 .filter 但零也被过滤掉了。最好的选择是什么?

function filter(l) {
  var arr = l.filter(Number);
  return arr;
}

您可以将 .filter() 与您自己的函数一起使用:

function filter(l) {
  var arr = l.filter(function(n) {
    return typeof n === "number";
  });
  return arr;
}

请注意,当您使用 Number 构造函数时,您将包括数字以及可以成功转换为数字的任何值。包括这样的东西有点棘手,因为 Number 构造函数 always returns 一个数字。该值可能是 NaN,但碰巧 NaN 实际上是一个数字,尽管它本质上坚持认为它不是。

如果您只想严格过滤掉整数,请尝试将这些辅助函数与 Array.filter 一起使用:

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

function isInt(n) {
  return isNumber(n) && n % 1 === 0;
}

this fiddle

上试试这些

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>

编辑: 这有整数的字符串表示的副作用也被 returned - 所以 [99,5,'love','hate', '23'] 将 return [99, 5, '23'] 这可能不是您想要的。