es6中的

本文深入探讨ES6中引入的Set数据结构,讲解其基本用法,包括初始化、添加、删除元素,以及如何实现数组去重。同时,介绍了Set的属性、方法,如size、add、delete、has和clear,以及遍历方法keys、values、entries和forEach。此外,还讨论了Set在集合操作中的应用,如并集、交集和差集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ES6提供了数据结构Set。类似于数组,但是没有重复值。

  • Set本身是一个构造函数,用来生成Set数据结构

    const s = new Set();
    [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
    for(let i of s ) {
    console.log(i); //2 3 5 4
    }

  • Set可以接受一个数组(或者类数组对象)作为参数,用来初始化

    var set = new Set([1, 2, 3, 4, 4]);
    […set]; // [1, 2, 3, 4]

可用于数组去重[…new Set(array)]
Array.from()方法可以将Set结构转换为数组Array.from(new Set(array))

  • 向Set加入值时,不会发生类型转换(类似于精确相等===),但是要注意在Set里NaN是等于自身的。另外两个对象总是不相等的。

    let set = new Set();
    let a = NaN;
    let b = NaN;
    set.add(a);
    set.add(b);
    set; //{NaN} 只能加入一个,说明Set内部两个NaN是相等的

Set实例的属性和方法

  • 属性:
    Set.prototype.constructor:构造函数,默认就是Set函数
    Set.prototype.size:返回实例的成员总数

  • 操作方法
    add(value):添加一个值,返回Set结构本身
    delete(value):删除某个值,返回布尔值
    has(value):返回布尔值,表示是否是成员
    clear():清除所有成员,无返回值

    s.add(1).add(2).add(2); //链式写法

    s.size(); //2

    s.has(3); //false

    s.delete(2);
    s.has(2); //false

  • 遍历方法
    keys():返回键名的遍历器(什么是遍历器?Iterator)
    values():返回键值的遍历器
    entries():返回键值对的遍历器
    forEach():使用回调函数遍历每个成员
    这里要注意Set的键名和键值是同一个值,所以key()和values()行为是一致的。

    let set = new Set([‘red’, ‘green’, ‘no’]);

     for(let item of set.keys()) {
         console.log(item); //red green no
     }
     
     for(let item of set.values()) {
         console.log(item); //red green no
     }
     
     for(let item of set.entries()) {
         console.log(item); //['red': 'red'] ['green': 'green'] ['no': 'no']
     }
    

    //对每个成员执行某种操作,参数依次为键值、键名、集合本身
    new Set([1, 2, 3]).forEach((value, key) => console.log(value * 2)); //2 4 6

  • 操作集合

    let a = new Set([1, 2, 3]);
    let b = new Set([4, 3, 2]);

    //并集
    let union = new Set([…a, …b]); //{1, 2, 3, 4}

    //交集
    let intersect = new Set([…a].filter(x => b.has(x))); //{2, 3}

    //差集
    let difference = new Set([…a].filter(x => !b.has(x))); //{1}
    号外:扩展运算符(…)内部使用for…of循环,所以应该知道for of是干嘛的吧

数组的map()和filter()可用于Set

let set = new Set([1, 2, 3]);
set = new Set([...set].map(x => x * 2)); //set: {2, 4, 6}

let set = new Set([1, 2, 3, 4, 5]);
set = new Set([...set].filter(x => (x % 2) == 0)); //set {2, 4}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值