【问题标题】:Filtering numbers out from an array从数组中过滤出数字
【发布时间】:2017-11-21 13:48:49
【问题描述】:

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

var str = [
  "https://xx.jpg",
  "https://xx.jpg",
  "1",
  "https://guide.jpg",
  "2", 
  "/static.jpg"
]

我有以下代码:

var filtered = str.filter(function(item) {
  return (typeof item === "number")
});

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

怎么做?

【问题讨论】:

  • 数组中有字符串,而不是数字。
  • digit?你是认真的? res 是什么?
  • 你在网上查过如何检查字符串是否为数字吗?
  • 我想请你了解一下 JavaScript 的基本类型。

标签: javascript arrays string filter


【解决方案1】:

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

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);

或者如果你想要数字:

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);

【讨论】:

  • 问题要求我们过滤掉数字,所以1.5也应该过滤掉。
  • 你说得对,parseInt(1.5) 返回 1,我以为它返回 NaN。我的坏
  • 我真的不明白人们为什么要投反对票!
  • 我认为你应该不在乎。当我确信它是正确的时,我赞成你的回答。我的回答没有被赞成,也没有被反对。当我确信自己给出了正确答案时,我也经常被否决,但这不会阻止我提供帮助。
  • @LajosArpad 同意。只是想知道为什么。
【解决方案2】:

如果字符串只包含数字,您可以使用正则表达式来测试字符串。

var array = ["https://xx.jpg", "https://xx.jpg", "1", "https://guide.jpg", "2", "/static.jpg"];

array = array.filter(function (a) {
    return !/^\d+$/.test(a);
});

console.log(array);

【讨论】:

    【解决方案3】:

    你在过滤器中使用 func 助手

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

    【讨论】:

      【解决方案4】:

      使用isNaN()

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

      【讨论】:

      • "1" 和 "2" 应该被过滤掉而不是其他项目,你需要 isNaN 而不是 !isNaN。另外,您的回答没有解决“”或空的情况。
      【解决方案5】:

      如果要检查字符串是否只包含数字,可以使用regular expressions

      var str = ["https://xx.jpg", "https://xx.jpg", "1", "https://guide.jpg", "2", "/static.jpg"];
      var filtered = str.filter(function (item) {
        return item.match(/^-?\d+$/);
      });
      console.log(filtered);

      【讨论】:

        【解决方案6】:
        str = str.filter(function(item) {
            return (item !== 0) && ((!item) || (isNaN(item)));
        });
        

        操作的右侧调用filter并传递一个function,如果项目不为0并且它是假的或不是数字,则返回true;否则返回false。例如 ""null 应该按照规范保存在数组中。通过这种方法,我们得到所需的数组,并将其分配给str 变量。

        【讨论】:

          【解决方案7】:

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

          str.filter(Number);
          

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

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

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

          str.filter(Number.isInteger)
          

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

          对于整数和浮点数,

          str.filter(Number.isFinite)
          

          【讨论】:

          • 我正要写同样的。这应该是最佳答案。
          • 这将排除 "0",因为 0 是 falsy
          • filter(Number) 除了零,你应该使用 filter(Number.isInteger)
          • @аlexdykyі filter(Number.isInteger) 也会排除数组中的所有整数值,如“1”、“3”等。
          【解决方案8】:

          const filterNumbers = [123456789, 'limit', 'elite', 987654321, 'destruction', 'present'];
          
          const result = filterNumbers.filter(number => parseInt(number) == number);
          
          console.log(result);

          下面是类似的代码,它返回数字而不是字符串。 => 只是 functionreturn 的替代语法(参见 arrow function expressions),但会产生相同的结果。

          【讨论】:

            【解决方案9】:

            上面的大部分答案都很好,但缺少一件事; 过滤出​​数字数组(既不是整数,也不是字符串形式的数字)。

            我已经添加了 sn-p 来解决这些小问题。

            var str = ["https://xx.jpg", "https://xx.jpg", "1", "https://guide.jpg", "2.4", "/static.jpg","4"];
            var filteredNumbers = str.filter(item=> parseFloat(item) == item).map(item=>parseFloat(item));
            console.log(filteredNumbers);

            【讨论】:

              【解决方案10】:
              var str = ["https://xx.jpg","https://xx.jpg","1","https://guide.jpg","2", "/static.jpg" ]
              str.filter(item=>!isNaN(parseInt(item)))
              

              parseInt 将数字转换为整数,其他值转换为“NaN”,isNaN 函数验证值是否为“NaN”

              https://www.w3schools.com/jsref/jsref_isnan.asp https://www.w3schools.com/jsref/jsref_parseint.asp

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2019-03-31
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-05-01
                • 1970-01-01
                • 2023-02-22
                相关资源
                最近更新 更多