• Set 数据结构


    ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set 不能提供的则是索引。

    let set = new Set();
    
    set.add({});
    set.size // 1
    
    set.add({});
    set.size // 2
    

      两个空对象不相等,所以它们被视为两个值。

    Set支持下列操作:

    1、new Set:创建一个新的、空的 Set。

    2、new Set(iterable):从任何可遍历数据中提取元素,构造出一个新的集合。

    3、set.size:获取集合的大小,即其中元素的个数。

    4、set.has(value):判定集合中是否含有指定元素,返回一个布尔值。

    5、set.add(value):添加元素。如果与已有重复,则不产生效果。

    6、set.delete(value):删除元素。如果并不存在,则不产生效果。.add()和.delete()都会返回集合自身,所以可以用链式语法。

    7、set[Symbol.iterator]():返回一个新的遍历整个集合的迭代器。一般这个方法不会被直接调用,因为实际上就是它使集合能够被遍历,也就是说,我们可以直接写 for (v of set) {...}等等。

    8、set.forEach(f):直接用代码来解释好了,它就像是 for (let value of set)  { f(value, value, set); }的简写,类似于数组的.forEach()方法。

    9、set.clear():清空集合。

    10、set.keys()、 set.values()和 set.entries()返回各种迭代器。

    Array.from方法可以将 Set 结构转为数组,可以用来数组去重。

    function do(array) {
      return Array.from(new Set(array));
    }
    
    do([1, 1, 2, 3]) // [1, 2, 3]
    

    扩展运算符(...)内部使用for...of循环,所以也可以用于 Set 结构,也可以用来数组去重。

    let arr = [3, 5, 2, 2, 5, 5];
    let unique = [...new Set(arr)];
    // [3, 5, 2]
    

    数组的mapfilter方法也可以间接用于 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}

    let a = new Set([1, 2, 3]);
    let b = new Set([4, 3, 2]);
    
    // 并集
    let union = new Set([...a, ...b]);
    // Set {1, 2, 3, 4}
    
    // 交集
    let intersect = new Set([...a].filter(x => b.has(x)));
    // set {2, 3}
    
    // 差集
    let difference = new Set([...a].filter(x => !b.has(x)));
    // Set {1}

      

  • 相关阅读:
    结构和联合
    字符串、字符和字节
    数组
    函数
    指针
    操作符和表达式
    语句
    数据
    TinyXML2 使用
    是否忘记了向源中添加“#include "StdAfx.h"”?
  • 原文地址:https://www.cnblogs.com/zjp-zxy/p/9945227.html
Copyright © 2020-2023  润新知