Set简记

Set是后出的API,可能大部分都习惯了用数组而忽略了这个数据类型,但是用熟练以后,也是可以大大提升特定场景开发效率的。

MDN文档见 Set() 构造函数

  • 构造函数
    必须使用new关键字构建,且需传入一个可迭代对象。

    1
    2
    new Set('1123'); // Set(3) {1, 2, 3}
    new Set([1,1,2,3]); // Set(3) {1, 2, 3}
  • 操作类

    • add增加项
    • delete删除项
    • clear清空项。
    1
    2
    3
    4
    5
    6
    7
    const s1 = new Set(); // Set(0) {}
    s1.add('1'); // Set(1) {1}
    s1.add('1'); // Set(1) {1}
    s1.add('2'); // Set(2) {1,2}
    s1.add('3'); // Set(3) {1,2,3}
    s1.delete('3'); // Set(2) {1,2}
    s1.clear(); // Set(0) {}
  • 判断类

    • has是否存在某项
    • isDisjointFrom是否不存在公共项
    • isSubsetOf是否为指定集合的子集
    • isSupersetOf是否为指定集合的超集。
    1
    2
    3
    4
    5
    6
    7
    8
    const s2 = new Set([1,2,3]);
    s2.has(2); // true
    s2.isDisjointFrom(new Set([2,3,4])); // false
    s2.isDisjointFrom(new Set([4,5,6])); // true
    s2.isSubsetOf(new Set([1,2])); // false
    s2.isSubsetOf(new Set([1,2,3,4])); // true
    s2.isSupersetOf(new Set([1,2,3,4])); // false
    s2.isSupersetOf(new Set([1,2])); // true
  • 计算类

    • difference只存在于当前集合并且不在指定集合的集合
    • intersection与指定集合的交集
    • union与指定集合的并集。
    • symmetricDifference与指定集合的并集中去掉交集的集合
    1
    2
    3
    4
    5
    const s3 = new Set([1,2,3]);
    s3.difference(new Set([3,4,5])); // Set(2) {1, 2}
    s3.intersection(new Set([3,4,5])); // Set(1) {3}
    s3.union(new Set([3,4,5])); // Set(5) {1, 2, 3, 4, 5}
    s3.symmetricDifference(new Set([3,4,5])); // Set(4) {1, 2, 4, 5}
  • 遍历类(统一按照插入顺序遍历)

    • values返回值的可迭代器对象
    • keysvalues的别名,因Set没有key
    • entries返回[value, key]的可迭代器对象,因为Set没有key,所有实际返回的是[value, value]的可迭代器对象
    • forEach对集合中的每个值执行一次提供的函数,没有返回值
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    const s4 = new Set([1,2,undefined]);
    for (let s of s4.values()) {
    console.log(s); // 1 2 undefined
    }
    for (let s of s4.keys()) {
    console.log(s); // 1 2 undefined
    }
    for (let s of s4.entries()) {
    console.log(s); // [1,1] [2,2] [undefined,undefined]
    }
    s4.forEach((value, key) => {
    console.log(value); // 1 2 undefined
    console.log(key); // 1 2 undefined
    })