Array.filter数字加零

时间:2015-10-01 16:37:24

标签: javascript arrays filter numbers

我有一个简单的问题,但我坚持使用它:我想转换一个整数和字符串列表,并返回一个新的列表,过滤掉字符串:

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

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

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

2 个答案:

答案 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;
}

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>
&#13;
&#13;
&#13;

编辑:这也会导致返回整数字符串表示的副作用 - 因此[99,5,'love','hate', '23']将返回[99, 5, '23'],这可能不是您想要的。< / p>