JavaScript 中的Set 数据结构

1. Set 数据结构

{1, 2, 3} 表示一个 Set 集合,包含三个元素:1, 2, 3

2. 创建 Set

// 创建 Set 的几种方式
const set1 = new Set([1, 2, 3]);  // 从数组创建
const set2 = new Set();           // 空Set
console.log(set1); // Set(3) {1, 2, 3}

3. Set 的特点

3.1 自动去重

const set = new Set([1, 2, 2, 3, 3, 3]);
console.log(set); // Set(3) {1, 2, 3} - 自动去除重复

3.2 任何类型的值都可以作为元素

const mixedSet = new Set([1, 'hello', true, {a: 1}, [1, 2]]);
console.log(mixedSet); // Set(5) {1, 'hello', true, {a: 1}, [1, 2]}

3.3 保持插入顺序

const set = new Set([3, 1, 2]);
for (let item of set) {
    console.log(item); // 3, 1, 2 (保持插入顺序)
}

4. Set 的常用方法🌟🌟🌟

const set = new Set([1, 2, 3]);

// 添加元素
set.add(4);        // Set(4) {1, 2, 3, 4}
set.add(2);        // Set(4) {1, 2, 3, 4} (重复元素不会被添加)

// 删除元素
set.delete(1);     // Set(3) {2, 3, 4}

// 检查元素是否存在
console.log(set.has(2)); // true

// 获取元素数量
console.log(set.size);   // 3

// 清空Set
set.clear();       // Set(0) {}

// 遍历Set
set.forEach(item => console.log(item));
for (let item of set) {
    console.log(item);
}

5. Set vs 数组 vs 对象

特性 Set 数组 对象
元素唯一性 ✅ 自动去重 ❌ 允许重复 ✅ 键唯一
元素类型 任意类型 任意类型 字符串/Symbol
顺序 插入顺序 索引顺序 不保证
查找性能 O(1) O(n) O(1)

6. Set vs 对象的区别

// Set - 存储值
const set = new Set([1, 2, 3]);
console.log(set); // Set(3) {1, 2, 3}

// 对象 - 存储键值对
const obj = {1: 'value1', 2: 'value2', 3: 'value3'};
console.log(obj); // {1: 'value1', 2: 'value2', 3: 'value3'}

// Set 查找
console.log(set.has(1)); // true

// 对象查找
console.log('1' in obj); // true (注意:对象的键是字符串)

7. 实际应用场景

7.1 数组去重

const arr = [1, 2, 2, 3, 3, 3];
const uniqueArr = [...new Set(arr)]; // [1, 2, 3]

7.2 集合运算

const setA = new Set([1, 2, 3]);
const setB = new Set([2, 3, 4]);

// 并集
const union = new Set([...setA, ...setB]); // {1, 2, 3, 4}

// 交集
const intersection = new Set([...setA].filter(x => setB.has(x))); // {2, 3}

// 差集
const difference = new Set([...setA].filter(x => !setB.has(x))); // {1}

7.3 记录已访问的元素

function removeDuplicates(arr) {
    const seen = new Set();
    const result = [];
    
    for (let item of arr) {
        if (!seen.has(item)) {
            seen.add(item);
            result.push(item);
        }
    }
    return result;
}

8. 总结

{1, 2, 3}Set 数据结构的表示方式,它具有:

  • 自动去重特性
  • 高效的查找性能 (O(1))
  • 保持插入顺序
  • 支持任何类型的值

在控制台输出时,Set 会显示为 Set(n) {value1, value2, ...} 的格式。
在这里插入图片描述

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐