js实现集合
集合的基本概念
集合是一种无序且不重复的数据结构,常用于存储唯一值。JavaScript 本身没有内置的集合类型,但可以通过对象或 ES6 的 Set 类实现。
使用 ES6 的 Set 实现集合
ES6 引入了 Set 类,直接支持集合操作:
const set = new Set();
set.add(1);
set.add(2);
set.add(1); // 重复值会被忽略
console.log(set.size); // 输出 2
console.log(set.has(1)); // 输出 true
set.delete(1);
console.log(set.has(1)); // 输出 false
使用对象模拟集合
在 ES6 之前,可以通过对象的键唯一性模拟集合:
const set = {};
set["1"] = true;
set["2"] = true;
set["1"] = true; // 重复值会被覆盖
console.log(Object.keys(set).length); // 输出 2
console.log("1" in set); // 输出 true
delete set["1"];
console.log("1" in set); // 输出 false
集合的常见操作
并集
合并两个集合的所有元素:
const union = (setA, setB) => new Set([...setA, ...setB]);
交集
获取两个集合的共同元素:
const intersection = (setA, setB) =>
new Set([...setA].filter(x => setB.has(x)));
差集
获取属于第一个集合但不属于第二个集合的元素:
const difference = (setA, setB) =>
new Set([...setA].filter(x => !setB.has(x)));
子集检查
判断一个集合是否是另一个集合的子集:
const isSubset = (setA, setB) =>
[...setA].every(x => setB.has(x));
性能注意事项
Set的add、delete和has操作的平均时间复杂度为 O(1)。- 使用对象模拟集合时,键会被强制转换为字符串,可能导致类型混淆。
Set可以直接存储任意类型的值(包括对象引用),而对象模拟仅支持字符串或 Symbol 作为键。







