用 set 验证多个输入项是否全部不重复:将输入转为数组并统一类型(如全转字符串),创建 new set(arr) 后比较 arr.length 与 set.size;相等则无重复,否则存在重复;若需定位重复项,可用 map 统计频次。

用 Set 验证多个输入项是否全部不重复,核心思路是:把所有输入项放进一个 Set,再对比原始数组长度和 Set 的大小。两者相等,说明没有重复;否则存在重复。
直接比较长度是最简洁的方法
适用于已知输入为数组、类数组或可遍历结构(如表单字段值列表):
- 先收集所有待验证的值到一个数组(注意类型一致性,比如都转成字符串避免
1和"1"被误判为不同) - 用
new Set(arr)创建集合,自动去重 - 检查
arr.length === new Set(arr).size
示例:
const inputs = ['apple', 'banana', 'cherry'];<br>const isAllUnique = inputs.length === new Set(inputs).size;<br>console.log(isAllUnique); // true
处理表单中多个 input 元素的场景
常见于注册页、多选配置等需要用户填写若干独立字段的场合:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 用
document.querySelectorAll选中目标输入框 - 提取
.value,过滤空值(按需),并确保类型统一(如全转字符串) - 传入
Set并比对
示例:
const fields = document.querySelectorAll('input[name="tag"]');<br>const values = Array.from(fields).map(el => el.value.trim()).filter(v => v);<br>const hasDuplicates = values.length !== new Set(values).size;
需要定位哪些值重复?用 Map 或对象辅助统计
Set 本身不提供重复项信息,若还需报错提示具体哪个值重复,可搭配 Map 计数:
- 遍历一次输入,用
Map记录每个值出现次数 - 再遍历该
Map,找出count > 1的键 - 这样既验证了“是否全唯一”,也拿到了重复项详情
示例:
const counts = new Map();<br>inputs.forEach(v => counts.set(v, (counts.get(v) || 0) + 1));<br>const duplicates = [...counts].filter(([, count]) => count > 1).map(([v]) => v);<br>const isAllUnique = duplicates.length === 0;
注意边界情况和类型陷阱
Set 按 SameValueZero 规则判断相等,这意味着:
-
0和-0被视为相同 -
NaN和NaN被视为相同(这是Set的特殊行为) - 对象或函数即使内容相同,也被视为不同(因为引用不同)
- 若需深比较对象,不能直接用
Set,得先序列化(如JSON.stringify)或自定义键生成逻辑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










