JavaScript数组去重需先明确重复定义:完全相等用Set;忽略大小写和空格先标准化再Set;语义归一化需同义词映射;保留首次原始值可用filter+indexOf。

JavaScript 数组去重本身不区分“标签关键词”,关键在于你如何定义“重复”——是字符串完全相等?忽略大小写?还是按语义归一化(比如去除空格、统一格式)?下面针对常见标签关键词去重场景,给出实用、可直接用的实现方式。
基础字符串完全匹配去重
适用于标签是纯字符串、大小写敏感、无多余空格的场景,比如 ['vue', 'react', 'vue', 'angular']。
- 推荐用
Set:简洁高效,保留原始顺序
const uniqueTags = [...new Set(tags)]; // ['vue', 'react', 'angular']
忽略大小写 + 去首尾空格去重
真实业务中,用户输入的标签常有大小写混用或空格(如 ' Vue '、'VUE'),需标准化后再去重。
- 先用
map统一转小写并 trim,再用Set去重 - 若需保留原始形式(如首次出现的写法),可用
reduce控制
const normalized = rawTags.map(t => t.trim().toLowerCase());
const unique = [...new Set(normalized)]; // ['vue', 'react', 'angular']
按语义归一化去重(如合并同义词)
若希望把 '前端'、'FE'、'Frontend' 视为同一标签,需自定义映射规则。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 建立同义词表(Map 或对象),将不同输入映射到统一主键
- 用主键去重,但返回原始标签(或指定首选形式)
['前端', 'frontend'],
['FE', 'frontend'],
['Frontend', 'frontend'],
['vue', 'vue'],
['Vue', 'vue']
]);
const tags = ['前端', 'FE', 'vue', 'Vue'];
const seen = new Set();
const unique = tags.filter(tag => {
const key = synonymMap.get(tag) || tag.toLowerCase();
if (seen.has(key)) return false;
seen.add(key);
return true;
}); // ['前端', 'vue']
保留首次出现的原始值(兼容老浏览器)
如果项目需支持 IE,或想显式控制逻辑,可用 filter + indexOf:
const unique = tags.filter((item, index) =>
tags.indexOf(item.toLowerCase()) === index
); // ['Vue', 'React']
注意:这里用 toLowerCase() 作比较依据,但保留原值;indexOf 查的是第一次出现的位置,天然保序。

















