美文网首页
ES6----Set数据结构

ES6----Set数据结构

作者: 字母31 | 来源:发表于2017-10-21 22:13 被阅读0次

    1、基本用法,属性以及方法

    ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set 本身是一个构造函数,用来生成 Set 数据结构。

    属性

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

    方法:操作方法以及遍历方法,先介绍操作方法

        add(value):添加某个值,返回Set结构本身。
        delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
        has(value):返回一个布尔值,表示该值是否为Set的成员。
        clear():清除所有成员,没有返回值。
    

    由上面的操作方法以及属性我们可以这样操作

    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
    s.size   //4
    

    针对set数据结构里没有重复元素,我们可以快速对数组去重

    const set = new Set([1, 2, 3, 4, 4]);
    [...set]
    
    // 去除数组的重复成员
    [...new Set(array)]
    

    向 Set 加入值的时候,不会发生类型转换,所以5和"5"是两个不同的值。Set 内部判断两个值是否不同,类似于精确相等运算符(===),主要的区别是NaN等于自身,而精确相等运算符认为NaN不等于自身。另外,两个对象总是不相等的。

    let set = new Set();
    let a = NaN;
    let b = NaN;
    set.add(a);
    set.add(b);
    set // Set {NaN}   set里NaN与NaN相等只能添加一个
    
    let set = new Set();
    set.add({});
    set.size // 1
    set.add({});
    set.size // 2
    

    遍历操作方法

    Set 结构的实例有四个遍历方法,可以用于遍历成员。

        keys():返回键名的遍历器
        values():返回键值的遍历器
        entries():返回键值对的遍历器
        forEach():使用回调函数遍历每个成员
    

    由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致。Set 结构的实例与数组一样,也拥有forEach方法,用于对每个成员执行某种操作,没有返回值。

    set = new Set([1, 4, 9]);
    set.forEach((value, key) => console.log(key + ' : ' + value))
    // 1 : 1
    // 4 : 4
    // 9 : 9
    

    遍历的应用

    扩展运算符和 Set 结构相结合,就可以去除数组的重复成员。

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

    数组的map和filter方法也可以用于 Set ,很容易地实现并集、交集和差集。

    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}
    

    相关文章

      网友评论

          本文标题:ES6----Set数据结构

          本文链接:https://www.haomeiwen.com/subject/pzewuxtx.html