如何从字符串数组的数组中提取不区分大小写的唯一元素
提取不区分大小写的唯一元素实现方案
这问题我熟!要搞定这个需求,得先拆解输入里的特殊情况——比如有的子数组里是逗号拼接的多元素字符串(像第一个子数组的"java,C,Node,ReactJs"),还有重复的、大小写不同的元素,咱们一步步来:
核心思路
- 扁平化+拆分元素:把嵌套的数组打平,同时把逗号分隔的字符串拆成单个元素;
- 不区分大小写去重:用一个集合记录已经出现过的小写元素,确保相同大小写变体只保留一个;
- 整理结果:最后输出去重后的元素(可以统一转小写,或者保留第一次出现的大小写,看需求调整)。
JavaScript 实现代码
const inputArray = [ ["java,C,Node,ReactJs"], ["c","Spring"], ["undefined"], ["asdja"], ["Java","Spring"], ["adjasjh"], ["adjasjh"], ["java"] ]; // 步骤1:扁平化并拆分所有元素 const flattened = inputArray.flat().map(str => str.split(',').map(item => item.trim())).flat(); // 步骤2:不区分大小写去重 const seen = new Set(); const uniqueElements = []; for (const elem of flattened) { const lowerElem = elem.toLowerCase(); if (!seen.has(lowerElem)) { seen.add(lowerElem); // 这里可以选择存小写,或者存原元素,根据需求调整 uniqueElements.push(lowerElem); // 如果要保留第一次出现的原大小写,就改成 uniqueElements.push(elem); } } console.log(uniqueElements); // 输出:["java", "c", "node", "reactjs", "undefined", "asdja", "spring", "adjasjh"]
代码解释
- 扁平化拆分:先用
flat()把嵌套数组打平,再用split(',')把逗号拼接的字符串拆成单个元素,最后再flat()一次得到一维的元素列表; - 去重逻辑:用
Set存储小写形式的元素,遍历的时候检查小写版是否已存在,不存在就加入结果数组,这样就实现了不区分大小写的去重; - 灵活调整:如果想保留元素第一次出现的大小写(比如原数组里的
C保留大写),只需要把uniqueElements.push(lowerElem)改成uniqueElements.push(elem)即可,输出结果会变成["java", "C", "Node", "ReactJs", "undefined", "asdja", "Spring", "adjasjh"],同样满足不区分大小写的唯一要求。
测试你的示例
把代码里的inputArray换成你的示例数组,运行后就能得到你期望的结果啦~
内容的提问来源于stack exchange,提问作者Adib Rajiwate
相关产品推荐
相关产品推荐

