当前位置:首页 > JavaScript

js实现的集合

2026-03-15 14:41:07JavaScript

JavaScript 集合的实现方法

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

使用 ES6 的 Set 对象

ES6 引入了原生的 Set 对象,可以直接用于存储唯一值:

js实现的集合

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);

使用对象模拟集合

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

js实现的集合

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)。

// 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
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现复制到剪贴板

js实现复制到剪贴板

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

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…