代码之家  ›  专栏  ›  技术社区  ›  Vianne

Javascript-不区分大小写的数组搜索

  •  1
  • Vianne  · 技术社区  · 7 年前

    这段代码去掉了所有重复的变量。是否有方法使此函数中的数组搜索不区分大小写?

    var x = ["AAA", "aaa", "bbb", "BBB"];
    
    function unique(list) {
      var result = [];
      $.each(list, function(i, e) {
        if ($.inArray(e, result) == -1) result.push(e);
      });
      return result;
    }
    
    // Output should be AAA, bbb
    console.log(unique(x)); 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    关联的 JSFiddle here

    4 回复  |  直到 7 年前
        1
  •  3
  •   Ele    7 年前
    • 您不需要jQuery。

    • 使用该功能 findIndex 并将每个比较的每个元素转换为小写。

    var x = ["AAA", "aaa", "bbb", "BBB"];
    
    function unique(list) {
      var result = [];
      list.forEach(function(e) {
        if (result.findIndex(function(r) {
          return r.toLowerCase() === e.toLowerCase();
        }) === -1)
        
        result.push(e);
      });
      
      return result;
    }
    
    console.log(unique(x))
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    使用箭头功能:

    var x = ["AAA", "aaa", "bbb", "BBB"];
    
    function unique(list) {
      var result = [];
      list.forEach((e) => {
        if (result.findIndex((r) => r.toLowerCase() === e.toLowerCase()) === -1)   
        result.push(e);
      });
      
      return result;
    }
    
    console.log(unique(x))
    。作为控制台包装{最大高度:100%!重要;顶部:0;}
        2
  •  0
  •   Jonas Wilms    7 年前

    您可以将lookuptable仅用于小写条目:

    function unique(arr){
      const before = new Set, result = [];
    
      for(const str of arr){
       const lower = str.toLowerCase();
       if(!before.has(lower)){
        before.add(lower);
        result.push(str);
       }
      }
      return result;
    }
    

    在一行中:

    const unique = arr => (set => arr.filter(el => (lower => !set.has(lower) && set.add(lower))(el.toLowerCase()))(new Set);
    
        3
  •  -1
  •   kishea    7 年前

    只要稍微调整一下,你就会在那里

    function unique(list) {
        var result = [];
        $.each(list, function(i, e) {
            if($.inArray(e, list)){ result.push(e)};
        });
        return result;
    }
    

    很好用

    无需更改案例 testing the code

        4
  •  -1
  •   Fraser    7 年前

    只需添加。toLowerCase到everything

    var x = ["AAA", "aaa", "bbb", "BBB"];
    
    function unique(list) {
      var result = [];
      $.each(list, function(i, e) {
        if ($.inArray(e.toLowerCase(), result) == -1) result.push(e.toLowerCase());
      });
      return result;
    }
    
    alert(unique(x));