JS数据类型——【set】精讲

在JavaScript中,Set 是一种集合数据结构,用于存储独特的值。与数组不同,Set 中的每个值都是唯一的,这意味着集合中不会有重复的元素。接下来,我将详细介绍 Set 的相关知识点。

1. 创建 Set

可以使用 Set 构造函数创建一个新的集合:

const mySet = new Set();

你还可以传递一个可迭代对象(如数组)来初始化集合:

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

2. 基本方法

  • add(value):向集合中添加一个值。如果值已经存在,则不执行任何操作。

    mySet.add(5);  // 添加值5
    mySet.add(1);  // 1已经存在,不会重复添加
    
  • delete(value):从集合中删除一个值。如果该值存在,则返回 true,否则返回 false

    mySet.delete(2);  // 删除值2
    
  • has(value):检查集合中是否存在某个值。返回 truefalse

    console.log(mySet.has(3));  // true
    
  • clear():清空集合,删除所有元素。

    mySet.clear();  // 清空集合
    

3. 属性

  • size:返回集合中元素的个数。

    console.log(mySet.size);  // 集合的大小
    

4. 遍历 Set

Set 是可迭代的,你可以使用 for...of 循环、forEach 方法或解构赋值来遍历 Set 中的元素。

  • for...of 循环

    for (const value of mySet) {
        console.log(value);
    }
    
  • forEach 方法

    mySet.forEach((value) => {
        console.log(value);
    });
    
  • 解构赋值

    const arr = [...mySet];  // 将Set转换为数组
    

5. Set 与数组的转换

  • 数组转换为 Set

    const myArray = [1, 2, 3, 4];
    const mySet = new Set(myArray);
    
  • Set 转换为数组

    const mySet = new Set([1, 2, 3, 4]);
    const myArray = Array.from(mySet);
    

6. Set 的应用场景

  • 数组去重:可以使用 Set 来去除数组中的重复元素。

    const numbers = [1, 2, 2, 3, 4, 4, 5];
    const uniqueNumbers = [...new Set(numbers)];
    console.log(uniqueNumbers);  // [1, 2, 3, 4, 5]
    
  • 高效查找:由于 Set 内部实现使用了类似哈希表的结构,因此查找元素的效率较高。

7. WeakSet

WeakSetSet 的一种变体,但只能存储对象,并且对象是弱引用(不会阻止垃圾回收)。因此,它通常用于跟踪对象的存在,而不影响对象的生命周期。

  • 创建 WeakSet

    const ws = new WeakSet();
    
  • adddeletehas 方法:与 Set 类似,但不能使用 size 属性,也无法遍历。

8. 注意事项

  • Set 内部元素的比较是基于 “SameValueZero” 算法的,这与严格相等 (===) 非常相似,但区别在于它将 NaN 视为相等。

    const set = new Set([NaN, NaN]);
    console.log(set.size);  // 1
    

9. 实际用例

  • 交集:两个集合的交集。

    const setA = new Set([1, 2, 3]);
    const setB = new Set([2, 3, 4]);
    const intersection = new Set([...setA].filter(x => setB.has(x)));
    console.log(intersection);  // Set {2, 3}
    
  • 并集:两个集合的并集。

    const union = new Set([...setA, ...setB]);
    console.log(union);  // Set {1, 2, 3, 4}
    
  • 差集:集合 A 相对于集合 B 的差集。

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

总结

Set 是一种非常有用的数据结构,尤其适用于需要存储唯一值、数组去重以及高效查找等场景。通过掌握基本方法和遍历操作,可以在日常编程中更灵活地使用 Set

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值