JavaScript Set 用法详解

JavaScript 中的 Set 是一种集合(Collection)数据结构,用于存储唯一值(即不能重复的值)的有序列表。它是在 ES6(ECMAScript 2015)中引入的内置对象。


🧩 核心特点

  1. 值唯一性Set 中的每个值只能出现一次,无论你是添加多少次重复的值,它只会保留一个。
  2. 可存储任意类型:可以存储原始类型(如字符串、数字、布尔值)和对象引用(包括数组、对象等)。
  3. 插入顺序保留:遍历时,元素的顺序与其插入顺序一致。
  4. 不是索引结构:不像数组那样通过数字索引访问元素,而是通过迭代器遍历。

🛠 常用方法和属性

方法/属性 说明
new Set([iterable]) 创建一个 Set,可选传入数组等可迭代对象进行初始化
set.add(value) 添加一个值(若已存在则忽略)
set.delete(value) 删除某个值,返回布尔值表示是否删除成功
set.has(value) 检查是否存在某个值,返回 true/false
set.clear() 清空所有元素
set.size 返回元素个数(类似数组的 length

🔁 遍历方式

Set 是可迭代的(iterable),支持以下遍历:

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

// for...of
for (const item of set) {
  console.log(item);
}

// forEach
set.forEach(value => console.log(value));

// 转为数组
const arr = [...set]; // [1, 2, 3]

✅ 常见用途

  1. 数组去重(最经典用法):

    const unique = [...new Set([1, 2, 2, 3, 3, 3])];
    console.log(unique); // [1, 2, 3]
    
  2. 高效判断元素是否存在(比数组的 indexOf 更语义化且性能更好):

    const bannedUsers = new Set(['alice', 'bob']);
    if (bannedUsers.has(currentUser)) {
      // 拒绝访问
    }
    
  3. 集合运算(如交集、并集、差集):

    const a = new Set([1, 2, 3]);
    const b = new Set([2, 3, 4]);
    
    // 并集
    const union = new Set([...a, ...b]);
    
    // 交集
    const intersect = new Set([...a].filter(x => b.has(x)));
    
    // 差集(a - b)
    const diff = new Set([...a].filter(x => !b.has(x)));
    

⚠️ 注意事项

  • 对象引用比较Set 使用「严格相等」(===)判断重复,因此两个内容相同但引用不同的对象会被视为不同元素:

    const set = new Set();
    set.add({}); 
    set.add({}); 
    console.log(set.size); // 2(两个不同的对象)
    
  • NaN 的处理Set 认为所有 NaN 是相等的(尽管 NaN !== NaN),所以只会保留一个 NaN


总结

Set 是 JavaScript 中用于高效存储和操作唯一值集合的工具,特别适合去重、成员检测和集合运算等场景。它是现代 JS 开发中非常实用的数据结构之一。

#前端开发 分享于 2025-10-31

【 内容由 AI 共享,不代表本站观点,请谨慎参考 】