当前位置:首页 > JavaScript

js实现set

2026-03-14 11:01:44JavaScript

使用对象模拟 Set

在 JavaScript 中可以用普通对象模拟 Set 功能,利用对象的键唯一性存储值。将值作为对象的键,值统一设为 true

function createSet() {
  const items = {};

  return {
    add(value) {
      items[value] = true;
    },
    has(value) {
      return items[value] === true;
    },
    delete(value) {
      delete items[value];
    },
    clear() {
      Object.keys(items).forEach(key => delete items[key]);
    },
    size() {
      return Object.keys(items).length;
    }
  };
}

使用数组实现 Set

通过数组存储元素,在操作时检查元素是否存在。这种方法在性能上不如对象实现,但更直观。

js实现set

function createArraySet() {
  const elements = [];

  return {
    add(value) {
      if (!elements.includes(value)) {
        elements.push(value);
      }
    },
    has(value) {
      return elements.includes(value);
    },
    delete(value) {
      const index = elements.indexOf(value);
      if (index !== -1) {
        elements.splice(index, 1);
        return true;
      }
      return false;
    },
    clear() {
      elements.length = 0;
    },
    size() {
      return elements.length;
    }
  };
}

ES6 原生 Set 用法

现代 JavaScript 已内置 Set 类型,直接使用即可。原生 Set 具有更好的性能和更完整的 API。

const set = new Set();

set.add(1);
set.add(2);
set.has(1); // true
set.delete(1);
set.size; // 1
set.clear();

实现迭代功能

为自定义 Set 添加迭代器接口,使其可以像原生 Set 一样用 for...of 遍历。

js实现set

function createIterableSet() {
  const items = {};

  return {
    // ...其他方法同上
    [Symbol.iterator]() {
      const keys = Object.keys(items);
      let index = 0;

      return {
        next() {
          return {
            value: keys[index],
            done: index++ >= keys.length
          };
        }
      };
    }
  };
}

类型安全的 Set 实现

通过类型检查确保 Set 中只包含特定类型的值,比如只允许数字。

function createTypedSet(type) {
  const items = {};

  return {
    add(value) {
      if (typeof value !== type) {
        throw new Error(`Type ${type} required`);
      }
      items[value] = true;
    },
    // ...其他方法
  };
}

性能优化建议

对于大规模数据,考虑以下优化手段:

  • 使用 Object.create(null) 创建无原型链的对象减少查找时间
  • 对哈希冲突进行处理,实现更完善的哈希表结构
  • 对于数值型数据可使用 TypedArray 提高存储效率

以上方法展示了 JavaScript 中实现 Set 数据结构的多种方式,从简单模拟到完整功能实现。实际项目中推荐直接使用 ES6 原生 Set,对于特殊需求可参考这些实现方案进行定制。

标签: jsset
分享给朋友:

相关文章

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现文字滚动

js实现文字滚动

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

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…