js 实现set
实现 Set 数据结构的方法
在 JavaScript 中,可以通过多种方式实现类似 Set 的数据结构。以下是几种常见的方法:
使用对象模拟 Set
通过对象的键唯一性来模拟 Set 的功能:
class MySet {
constructor() {
this.items = {};
}
add(element) {
if (!this.has(element)) {
this.items[element] = element;
return true;
}
return false;
}
delete(element) {
if (this.has(element)) {
delete this.items[element];
return true;
}
return false;
}
has(element) {
return Object.prototype.hasOwnProperty.call(this.items, element);
}
clear() {
this.items = {};
}
size() {
return Object.keys(this.items).length;
}
values() {
return Object.values(this.items);
}
}
使用数组实现 Set
通过数组的 includes 方法检查元素是否存在:
class ArraySet {
constructor() {
this.elements = [];
}
add(element) {
if (!this.has(element)) {
this.elements.push(element);
}
}
has(element) {
return this.elements.includes(element);
}
delete(element) {
const index = this.elements.indexOf(element);
if (index !== -1) {
this.elements.splice(index, 1);
return true;
}
return false;
}
size() {
return this.elements.length;
}
values() {
return [...this.elements];
}
}
使用 ES6 原生 Set
现代 JavaScript 已经内置了 Set 数据结构:
const set = new Set();
// 添加元素
set.add(1);
set.add(2);
set.add(3);
// 检查元素是否存在
console.log(set.has(2)); // true
// 删除元素
set.delete(2);
// 获取大小
console.log(set.size); // 2
// 清空集合
set.clear();
实现 Set 运算
扩展 Set 功能,实现并集、交集、差集等运算:

class AdvancedSet extends Set {
union(otherSet) {
return new AdvancedSet([...this, ...otherSet]);
}
intersection(otherSet) {
return new AdvancedSet([...this].filter(x => otherSet.has(x)));
}
difference(otherSet) {
return new AdvancedSet([...this].filter(x => !otherSet.has(x)));
}
isSubset(otherSet) {
return [...this].every(x => otherSet.has(x));
}
}
这些方法展示了在 JavaScript 中实现 Set 数据结构的不同方式,从基础实现到利用语言内置功能,以及扩展集合运算的能力。






