当前位置:首页 > JavaScript

js实现set函数

2026-02-03 08:14:26JavaScript

实现 Set 函数

在 JavaScript 中,Set 是一种内置数据结构,用于存储唯一值。如果需要手动实现类似功能,可以通过对象或数组模拟其行为。

基于对象的实现

利用对象的键唯一性模拟 Set 的行为:

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

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

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

CustomSet.prototype.delete = function(value) {
  if (this.has(value)) {
    delete this.items[value];
    return true;
  }
  return false;
};

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

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

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

基于数组的实现

通过数组存储值,并确保唯一性:

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

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

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

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

ES6 Class 实现

使用 ES6 的 class 语法实现 Set

js实现set函数

class MySet {
  constructor() {
    this.collection = [];
  }

  has(element) {
    return this.collection.indexOf(element) !== -1;
  }

  add(element) {
    if (!this.has(element)) {
      this.collection.push(element);
      return true;
    }
    return false;
  }

  delete(element) {
    if (this.has(element)) {
      const index = this.collection.indexOf(element);
      this.collection.splice(index, 1);
      return true;
    }
    return false;
  }

  size() {
    return this.collection.length;
  }

  values() {
    return this.collection;
  }
}

注意事项

  • 对象实现的 Set 会将所有键转换为字符串,可能导致类型混淆。
  • 数组实现的 Set 在大型数据集上性能较低,因为需要遍历检查唯一性。
  • 实际开发中应优先使用原生 Set,性能更高且功能完善。

标签: 函数js
分享给朋友:

相关文章

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js实现文字滚动

js实现文字滚动

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

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…

js 实现拖拽

js 实现拖拽

实现拖拽的基本步骤 在JavaScript中实现拖拽功能需要监听几个关键事件:mousedown、mousemove和mouseup。以下是实现的基本逻辑。 监听目标元素的mousedown事件,记…

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…