当前位置:首页 > JavaScript

js实现集合

2026-04-07 03:01:06JavaScript

集合的基本概念

在JavaScript中,集合(Set)是一种存储唯一值的数据结构,不允许重复元素。ES6引入了原生Set对象,但也可以手动实现类似功能。

使用原生Set对象

ES6的Set对象提供集合功能:

const mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(1); // 重复值不会被添加

console.log(mySet.size); // 2
console.log(mySet.has(1)); // true
mySet.delete(2);

手动实现集合类

可以创建一个自定义集合类:

class MySet {
  constructor() {
    this.items = {};
  }

  has(value) {
    return this.items.hasOwnProperty(value);
  }

  add(value) {
    if (!this.has(value)) {
      this.items[value] = value;
      return true;
    }
    return false;
  }

  delete(value) {
    if (this.has(value)) {
      delete this.items[value];
      return true;
    }
    return false;
  }

  size() {
    return Object.keys(this.items).length;
  }

  values() {
    return Object.values(this.items);
  }
}

集合操作

实现常见的集合操作:

// 并集
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;
}

// 差集
function difference(setA, setB) {
  const differenceSet = new Set();
  setA.forEach(value => {
    if (!setB.has(value)) {
      differenceSet.add(value);
    }
  });
  return differenceSet;
}

集合与数组转换

集合与数组之间可以相互转换:

// 数组转集合
const arr = [1, 2, 3, 3];
const setFromArr = new Set(arr); // {1, 2, 3}

// 集合转数组
const arrFromSet = [...setFromArr]; // [1, 2, 3]

集合的迭代

可以使用各种方式迭代集合:

const mySet = new Set([1, 2, 3]);

// for...of循环
for (let item of mySet) {
  console.log(item);
}

// forEach方法
mySet.forEach(value => {
  console.log(value);
});

WeakSet

对于对象集合,可以使用WeakSet,它只存储对象引用且是弱引用:

js实现集合

const weakSet = new WeakSet();
const obj = {};
weakSet.add(obj);
console.log(weakSet.has(obj)); // true

标签: js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…