【问题标题】:How to filter an array in javascript?如何在javascript中过滤数组?
【发布时间】:2018-02-05 13:18:16
【问题描述】:

这是一个数组,

total = ["10%", 1000, "5%", 2000] 。如何使用 javascript 数组过滤器将它们过滤成两个数组,例如百分比 = ["10%","5%"] 和绝对 = [1000,2000]。

【问题讨论】:

  • 值是否仅按此顺序排列 ["percentage', 'absolute', ...] ?
  • 你真的没有搜索吗? SO 有很多关于此类过​​滤器的问答。

标签: javascript arrays filter


【解决方案1】:

您应该使用filter 方法,该方法接受callback 函数。

filter() 方法创建一个包含所有通过的元素的新数组 由提供的函数实现的测试。

另外,使用typeof operator 来从数组中找出项目的类型。 typeof 运算符返回一个字符串,指示未计算的操作数的类型。

let total = ["10%", "1000", "5%", "2000"];
let percentage = total.filter(function(item){
  return typeof item == 'string' && item.includes('%');
});
console.log(percentage);
let absolute = total.filter(function(item){
  return typeof item == 'number' || !isNaN(item);
});
console.log(absolute);

【讨论】:

    【解决方案2】:

    let total = ["10%", 1000, "5%", 2000];
    
    let percents = total.filter(item => item.toString().includes('%'));
    let numbers = total.filter(item => !item.toString().includes('%'));
    console.log(percents, numbers);

    【讨论】:

    • 你得到了反向过滤条件的否定。
    • @vkgade 你是什么意思?
    • 百分比是带有 '%' 字符的那个,你用百分比而不是数字来否定返回值。
    【解决方案3】:

    您可以使用正则表达式,因为您的数组中只有字符串。

    对于 %:

    total.filter(function(element){
        return /^[0-9]+\%$/gi.test(element);
    });
    

    对于绝对:

    total.filter(function(element){
        return /^[0-9]+$/gi.test(element);
    });
    

    【讨论】:

      【解决方案4】:

      您可以使用 Array#reduce 来拆分数组:

      const total = ["10%", 1000, "5%", 2000];
      
      const { absolute, percentage } = total.reduce((arrs, item) => {
        const key = typeof item === 'number' ? 'absolute' : 'percentage';
        
        arrs[key].push(item);
        
        return arrs;
      }, { percentage: [], absolute: [] });
      
      console.log(absolute);
      
      console.log(percentage);

      【讨论】:

        【解决方案5】:
        Make two arrays from one array by separating number and string using advance  
        js.
        

        let total = ["10%", 1000, "5%", 2000];
        var percentage = total.filter(e => isNaN(e));
        var absolute = total.filter(e => !isNaN(e));
        console.log({percentage , absolute});

        【讨论】:

          【解决方案6】:

          你可以使用

          let total = ["10%", 1000, "5%", 2000]
          
          
          let result1 = total.filter(function(element){
              if(typeof element == "number"){
                  return 1;
              }
              return 0;
          })
          let result2 = total.filter(function(element){
              if(typeof element == "string" && element.match(/\%$/)){
                  return 1;
              }
              return 0;
          })
          console.log(result1, result2);

          第一个数组过滤所有数字
          第二个数组过滤元素,它是一个字符串,最后有一个“%”

          【讨论】:

            【解决方案7】:

            使用此代码

            $array = array('10%', '1000', '20%','2000');
            

            //用于显示数组中的整数

            print_r(array_filter($array, function ($var) { return (stripos($var, '%') === false); }));

            //用于显示%数组

            print_r(array_filter($array, function ($var) { return (stripos($var, '%') == true); }));

            【讨论】:

              【解决方案8】:
              let total = ["10%", "1000", "5%", "2000"];
              let percentage = total.filter(function(item){
                return typeof item == 'string' && item.includes('%');
              });
              console.log(percentage);
              let absolute = total.filter(function(item){
                return typeof item == 'number' || !isNaN(item);
              });
              console.log(absolute);
              

              【讨论】:

                猜你喜欢
                • 2020-08-09
                • 2018-11-22
                • 2020-07-03
                • 1970-01-01
                • 1970-01-01
                • 2022-01-02
                • 2021-03-03
                • 2017-09-10
                相关资源
                最近更新 更多