【问题标题】:Javascript - Case insensitive Array SearchJavascript - 不区分大小写的数组搜索
【发布时间】:2018-03-19 17:12:42
【问题描述】:

这段代码去掉了所有重复的变量。有没有办法让这个函数中的数组搜索不区分大小写?

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

【问题讨论】:

标签: javascript jquery arrays regex


【解决方案1】:
  • 你不需要 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))
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • "一小部分字符,当它们转换为小写时,不能往返。往返意味着将字符从一个语言环境转换到另一个以不同方式表示字符数据的语言环境,然后从转换后的字符中准确地检索出原始字符。”
【解决方案2】:

您可以使用仅包含小写条目的查找表:

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】:

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

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

    效果很好

    无需更改大小写

    【讨论】:

      【解决方案4】:

      只需将 .toLowerCase 添加到所有内容中

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多