当前位置:首页 > JavaScript

js set 实现

2026-02-02 01:14:57JavaScript

Set 的基本概念

Set 是 ES6 引入的一种新的数据结构,类似于数组,但成员的值都是唯一的,没有重复值。Set 本身是一个构造函数,用来生成 Set 数据结构。

创建 Set

通过 new Set() 构造函数可以创建一个空的 Set。也可以传入一个可迭代对象(如数组)来初始化 Set。

const set1 = new Set();
const set2 = new Set([1, 2, 3, 4, 4]); // 自动去重,set2 包含 1, 2, 3, 4

Set 的常用方法

  • add(value): 添加某个值,返回 Set 结构本身。
  • delete(value): 删除某个值,返回一个布尔值,表示是否删除成功。
  • has(value): 返回一个布尔值,表示该值是否为 Set 的成员。
  • clear(): 清除所有成员,没有返回值。
  • size: 属性,返回 Set 实例的成员总数。
const set = new Set();
set.add(1).add(2).add(3); // 链式调用
set.has(2); // true
set.delete(2); // true
set.size; // 2
set.clear(); // 清空 Set

Set 的遍历方法

Set 实例有四种遍历方法,可以用于遍历成员:

  • keys(): 返回键名的遍历器。
  • values(): 返回键值的遍历器(Set 的键和值是同一个值)。
  • entries(): 返回键值对的遍历器。
  • forEach(): 使用回调函数遍历每个成员。
const set = new Set([1, 2, 3]);

for (let item of set.keys()) {
  console.log(item); // 1, 2, 3
}

for (let item of set.values()) {
  console.log(item); // 1, 2, 3
}

for (let item of set.entries()) {
  console.log(item); // [1, 1], [2, 2], [3, 3]
}

set.forEach((value, key) => {
  console.log(key, value); // 1 1, 2 2, 3 3
});

Set 的应用场景

  1. 数组去重
    Set 可以轻松实现数组去重。

    const arr = [1, 2, 2, 3, 4, 4];
    const uniqueArr = [...new Set(arr)]; // [1, 2, 3, 4]
  2. 存储唯一值
    适用于需要存储不重复数据的场景,如用户 ID、标签等。

  3. 集合运算
    可以通过 Set 实现并集、交集、差集等操作。

    const setA = new Set([1, 2, 3]);
    const setB = new Set([2, 3, 4]);
    
    // 并集
    const union = new Set([...setA, ...setB]); // Set {1, 2, 3, 4}
    
    // 交集
    const intersection = new Set([...setA].filter(x => setB.has(x))); // Set {2, 3}
    
    // 差集(A 有而 B 没有)
    const difference = new Set([...setA].filter(x => !setB.has(x))); // Set {1}

WeakSet

WeakSet 是 Set 的变体,主要区别在于:

js set 实现

  • WeakSet 的成员只能是对象。
  • WeakSet 中的对象是弱引用,不会阻止垃圾回收。
  • WeakSet 不可遍历,没有 size 属性和遍历方法。
const weakSet = new WeakSet();
const obj = {};
weakSet.add(obj);
weakSet.has(obj); // true
weakSet.delete(obj); // true

标签: jsset
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Pro…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现删除

js实现删除

使用 splice 方法删除数组元素 splice 方法可以删除数组中的元素,并返回被删除的元素。它接受两个参数:起始索引和要删除的元素数量。 const array = [1, 2, 3, 4…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…

js实现文件夹

js实现文件夹

使用JavaScript创建文件夹 在浏览器端的JavaScript中无法直接操作文件系统创建文件夹,这是出于安全考虑。但在Node.js环境中可以通过文件系统模块(fs)实现。 Node.js中使…