如何让JavaScript数组去重函数实现不区分大小写的搜索?
解决大小写不敏感的数组去重问题
嘿,我来帮你搞定这个数组去重的需求~原函数因为是严格匹配字符串(区分大小写),所以没法满足你的要求,咱们可以通过维护一个记录小写形式的辅助数组来实现不区分大小写的去重,同时保留第一次出现的元素原大小写。
修改后的代码
function unique(list) { var result = []; var seenLowerCase = []; // 用来存已经处理过的元素的小写版本 $.each(list, function(i, e) { var lowerE = e.toLowerCase(); // 检查当前元素的小写形式是否已经出现过 if ($.inArray(lowerE, seenLowerCase) === -1) { seenLowerCase.push(lowerE); result.push(e); // 保留原元素的大小写格式 } }); return result; } var x = ["AAA", "aaa", "bbb", "BBB"]; console.log(unique(x)); // 输出: ["AAA", "bbb"]
核心思路解释
- 新增了
seenLowerCase数组,专门存储已经加入结果的元素的小写形式,这样做的目的是统一判断标准,忽略大小写差异。 - 遍历原数组时,先把当前元素转成小写,用
$.inArray检查这个小写值是否在seenLowerCase里:- 如果不在,说明这个元素(不区分大小写)是第一次出现,就把小写值加入
seenLowerCase,同时把原元素加入结果数组result,保留它原来的大小写。 - 如果已经存在,说明之前已经有过大小写不敏感的相同元素,直接跳过。
- 如果不在,说明这个元素(不区分大小写)是第一次出现,就把小写值加入
这样处理后,就完美实现了你想要的效果:原数组里的"AAA"先出现,后续的"aaa"被过滤;"bbb"先出现,后续的"BBB"被过滤,最终输出["AAA", "bbb"]。
内容的提问来源于stack exchange,提问作者Vianne
相关产品推荐
相关产品推荐

