当前位置:首页 > JavaScript

js实现的集合

2026-03-15 14:41:07JavaScript

JavaScript 集合的实现方法

JavaScript 提供了多种方式来实现集合(Set)数据结构,以下是几种常见的方法:

使用 ES6 的 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

使用数组模拟集合

在没有 Set 支持的旧环境中,可以使用数组来模拟集合:

function Set() {
  this.values = [];
  this.add = function(value) {
    if (this.values.indexOf(value) === -1) {
      this.values.push(value);
    }
  };
  this.has = function(value) {
    return this.values.indexOf(value) !== -1;
  };
}

const mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(1);

使用对象模拟集合

另一种方法是利用对象的键唯一性来模拟集合:

function Set() {
  this.values = {};
  this.add = function(value) {
    this.values[value] = true;
  };
  this.has = function(value) {
    return this.values[value] === true;
  };
}

const mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(1);

集合操作实现

可以扩展集合的基本功能,实现并集、交集、差集等操作:

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

  has(element) {
    return Object.prototype.hasOwnProperty.call(this.items, element);
  }

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

  union(otherSet) {
    const unionSet = new MySet();
    Object.values(this.items).forEach(value => unionSet.add(value));
    Object.values(otherSet.items).forEach(value => unionSet.add(value));
    return unionSet;
  }

  intersection(otherSet) {
    const intersectionSet = new MySet();
    Object.values(this.items).forEach(value => {
      if (otherSet.has(value)) {
        intersectionSet.add(value);
      }
    });
    return intersectionSet;
  }
}

性能考虑

对于大型数据集,Set 对象的性能通常优于数组实现,因为 Set 的查找操作时间复杂度为 O(1),而数组的 indexOf 方法为 O(n)。

js实现的集合

// Set 性能示例
const largeSet = new Set();
for (let i = 0; i < 1000000; i++) {
  largeSet.add(i);
}
console.time('Set查找');
largeSet.has(999999);
console.timeEnd('Set查找');

// 数组性能示例
const largeArray = [];
for (let i = 0; i < 1000000; i++) {
  if (largeArray.indexOf(i) === -1) {
    largeArray.push(i);
  }
}
console.time('数组查找');
largeArray.indexOf(999999);
console.timeEnd('数组查找');

以上方法提供了在 JavaScript 中实现集合的不同方式,可以根据具体需求和环境选择最适合的实现。

标签: js
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js 实现链表

js 实现链表

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