js 实现集合
集合的基本概念
集合是一种无序且元素唯一的数据结构,常用于存储不重复的值。JavaScript 原生提供了 Set 对象来实现集合功能。
创建集合
使用 Set 构造函数可以创建一个空集合,或通过传递一个可迭代对象(如数组)初始化集合:
const emptySet = new Set();
const setFromArray = new Set([1, 2, 3, 2]); // 重复的 2 会被自动去重
console.log(setFromArray); // 输出: Set {1, 2, 3}
添加元素
通过 add 方法向集合中添加元素。如果元素已存在,集合不会发生变化:
const set = new Set();
set.add(1);
set.add(2);
set.add(1); // 重复添加无效
console.log(set); // 输出: Set {1, 2}
删除元素
使用 delete 方法移除集合中的指定元素,返回布尔值表示是否删除成功:
set.delete(2); // 返回 true
set.delete(99); // 返回 false
检查元素是否存在
通过 has 方法检查集合是否包含某个元素:
console.log(set.has(1)); // 输出: true
console.log(set.has(2)); // 输出: false
获取集合大小
使用 size 属性获取集合中元素的数量:
console.log(set.size); // 输出: 1
清空集合
调用 clear 方法清空集合中的所有元素:
set.clear();
console.log(set.size); // 输出: 0
遍历集合
集合可以通过 forEach 或迭代器(如 for...of)遍历:
const set = new Set(['a', 'b', 'c']);
set.forEach(value => console.log(value)); // 依次输出 'a', 'b', 'c'
for (const item of set) {
console.log(item); // 依次输出 'a', 'b', 'c'
}
集合运算
原生 Set 不直接支持并集、交集、差集等操作,但可以通过以下方式实现:
并集:合并两个集合的所有元素
const union = (setA, setB) => new Set([...setA, ...setB]);
交集:获取两个集合共有的元素
const intersection = (setA, setB) => new Set([...setA].filter(x => setB.has(x)));
差集:获取存在于集合 A 但不在集合 B 中的元素
const difference = (setA, setB) => new Set([...setA].filter(x => !setB.has(x)));
集合与数组转换
集合可以通过扩展运算符或 Array.from 转换为数组:
const set = new Set([1, 2, 3]);
const array1 = [...set];
const array2 = Array.from(set);
注意事项
- 集合中的元素通过严格相等(
===)比较唯一性。 NaN在集合中被视为与自身相等,尽管NaN !== NaN。- 对象引用是唯一的,即使内容相同也会被视为不同元素。







