当前位置:首页 > 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

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

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 遍历。

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;
    },
    // ...其他方法
  };
}

性能优化建议

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

js实现set

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

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

标签: jsset
分享给朋友:

相关文章

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…