此代码删除了所有重复的变量。有没有办法让这个函数中的数组搜索不区分大小写?
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>
&#13;
答案 0 :(得分:1)
您不需要jQuery。
使用函数findIndex
并将每个元素的每个元素转换为lowerCase。
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))
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
使用箭头功能:
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))
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 1 :(得分:0)
您可以使用仅包含小写条目的查阅表:
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;
}
在一个oneliner:
const unique = arr => (set => arr.filter(el => (lower => !set.has(lower) && set.add(lower))(el.toLowerCase()))(new Set);
答案 2 :(得分:-1)
只需将.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));
答案 3 :(得分:-1)