当前位置:首页 > JavaScript

js 实现set

2026-03-02 06:46:16JavaScript

使用对象模拟 Set

在 JavaScript 中,可以通过对象来模拟 Set 的功能。对象的键是唯一的,可以用来存储 Set 的元素。

function CustomSet() {
  this.items = {};
}

CustomSet.prototype.add = function(value) {
  this.items[value] = true;
};

CustomSet.prototype.has = function(value) {
  return this.items.hasOwnProperty(value);
};

CustomSet.prototype.delete = function(value) {
  delete this.items[value];
};

CustomSet.prototype.clear = function() {
  this.items = {};
};

CustomSet.prototype.size = function() {
  return Object.keys(this.items).length;
};

使用数组实现 Set

另一种方法是使用数组来存储元素,并通过数组的方法来实现 Set 的操作。

js 实现set

function ArraySet() {
  this.items = [];
}

ArraySet.prototype.add = function(value) {
  if (!this.items.includes(value)) {
    this.items.push(value);
  }
};

ArraySet.prototype.has = function(value) {
  return this.items.includes(value);
};

ArraySet.prototype.delete = function(value) {
  const index = this.items.indexOf(value);
  if (index !== -1) {
    this.items.splice(index, 1);
    return true;
  }
  return false;
};

ArraySet.prototype.clear = function() {
  this.items = [];
};

ArraySet.prototype.size = function() {
  return this.items.length;
};

ES6 原生 Set

现代 JavaScript 已经内置了 Set 对象,可以直接使用。

js 实现set

const set = new Set();

set.add(1);
set.add(2);
set.add(1); // 重复值不会被添加

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

set.delete(1);
console.log(set.has(1)); // false

set.clear();
console.log(set.size); // 0

自定义 Set 的迭代功能

如果需要自定义 Set 的迭代功能,可以实现 Symbol.iterator 方法。

CustomSet.prototype[Symbol.iterator] = function*() {
  for (const key in this.items) {
    yield key;
  }
};

const customSet = new CustomSet();
customSet.add('a');
customSet.add('b');

for (const item of customSet) {
  console.log(item); // 'a', 'b'
}

实现 Set 的并集、交集和差集

可以扩展 Set 的功能,实现集合的常见操作。

CustomSet.prototype.union = function(otherSet) {
  const unionSet = new CustomSet();
  for (const item in this.items) {
    unionSet.add(item);
  }
  for (const item in otherSet.items) {
    unionSet.add(item);
  }
  return unionSet;
};

CustomSet.prototype.intersection = function(otherSet) {
  const intersectionSet = new CustomSet();
  for (const item in this.items) {
    if (otherSet.has(item)) {
      intersectionSet.add(item);
    }
  }
  return intersectionSet;
};

CustomSet.prototype.difference = function(otherSet) {
  const differenceSet = new CustomSet();
  for (const item in this.items) {
    if (!otherSet.has(item)) {
      differenceSet.add(item);
    }
  }
  return differenceSet;
};

标签: jsset
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…