js实现集合
JavaScript 实现集合的方法
在 JavaScript 中,可以通过多种方式实现集合(Set)数据结构,以下是几种常见的方法:
使用 ES6 的 Set 类
ES6 引入了原生的 Set 类,可以直接使用它来创建集合。
const set = new Set();
set.add(1);
set.add(2);
set.add(1); // 重复元素会被忽略
console.log(set.has(1)); // true
set.delete(1);
console.log(set.size); // 1
使用对象模拟集合
在 ES6 之前,可以通过对象来模拟集合的功能。
const set = {};
set['1'] = true;
set['2'] = true;
set['1'] = true; // 重复元素会被覆盖
console.log('1' in set); // true
delete set['1'];
console.log(Object.keys(set).length); // 1
实现自定义集合类
如果需要更灵活的功能,可以自定义一个集合类。
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);
}
size() {
return Object.keys(this.items).length;
}
values() {
return Object.values(this.items);
}
}
const set = new MySet();
set.add(1);
set.add(2);
console.log(set.values()); // [1, 2]
使用数组实现集合
虽然数组的性能不如对象或 Set,但在某些场景下也可以用数组模拟集合。
const set = [];
function add(element) {
if (!set.includes(element)) {
set.push(element);
}
}
add(1);
add(2);
add(1);
console.log(set); // [1, 2]
集合操作
可以扩展集合的功能,实现并集、交集、差集等操作。

function union(setA, setB) {
const unionSet = new Set();
setA.forEach(value => unionSet.add(value));
setB.forEach(value => unionSet.add(value));
return unionSet;
}
function intersection(setA, setB) {
const intersectionSet = new Set();
setA.forEach(value => {
if (setB.has(value)) {
intersectionSet.add(value);
}
});
return intersectionSet;
}
const setA = new Set([1, 2, 3]);
const setB = new Set([2, 3, 4]);
console.log(union(setA, setB)); // Set {1, 2, 3, 4}
console.log(intersection(setA, setB)); // Set {2, 3}
以上方法可以根据具体需求选择适合的实现方式。ES6 的 Set 是最推荐的方式,因为它提供了完整的集合操作且性能最优。






