从数组中过滤出数字

Amb*_*ili 3 javascript arrays string filter

我有一个如下所示的数组,需要从中过滤掉数字,例如: [1,2]

var str = [
  "https://xx.jpg",
  "https://xx.jpg",
  "1",
  "https://guide.jpg",
  "2", 
  "/static.jpg"
]
Run Code Online (Sandbox Code Playgroud)

我有以下代码:

var filtered = str.filter(function(item) {
  return (typeof item === "number")
});
Run Code Online (Sandbox Code Playgroud)

但它没有过滤,因为它是一个字符串。

怎么做?

20B*_*0B2 13

我认为这是从数组中过滤掉数字的最精确方法。

str.filter(Number);
Run Code Online (Sandbox Code Playgroud)

如果数组包含字符串形式的数字,则生成的数组将具有字符串形式的数字。在您的情况下,结果数组将为 ["1", "2"]。

如果原始数组包含 0 或“0”,则它们将不会出现在结果数组中。

如果结果数组应该只包含整数,

str.filter(Number.isInteger)
Run Code Online (Sandbox Code Playgroud)

这将排除字符串形式的数字,如“1”、“2”等。

对于整数和浮点数,

str.filter(Number.isFinite)
Run Code Online (Sandbox Code Playgroud)

  • 这将排除“0”,因为 0 是 [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) 值 (3认同)

Pra*_*man 9

对您的代码进行一些小的更改以使其工作,这可能会起作用。

var str = ["https://xx.jpg", "https://xx.jpg", "1", "https://guide.jpg", "2", "/static.jpg"];
var filtered = str.filter(function (item) {
  return !(parseInt(item) == item);
});
console.log(filtered);
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要数字:

var str = ["https://xx.jpg", "https://xx.jpg", "1", "https://guide.jpg", "2", "/static.jpg"];
var filtered = str.filter(function (item) {
  return (parseInt(item) == item);
});
console.log(filtered);
Run Code Online (Sandbox Code Playgroud)