当前位置:首页 > JavaScript

js 实现set

2026-04-05 07:48:23JavaScript

实现 Set 数据结构的方法

在 JavaScript 中,可以通过多种方式实现类似 Set 的数据结构。以下是几种常见的方法:

使用对象模拟 Set

通过对象的键唯一性来模拟 Set 的功能:

js 实现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 方法检查元素是否存在:

js 实现set

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 数据结构的不同方式,从基础实现到利用语言内置功能,以及扩展集合运算的能力。

标签: jsset
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现继承

js实现继承

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

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…