当前位置:首页 > 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 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

利用js实现

利用js实现

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

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…