zoukankan      html  css  js  c++  java
  • ES6学习笔记(二)

    Set 和 Map 数据结构

    1.set

    基本用法

    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

    上面代码通过add()方法向Set结构加入成员,结果表明Set结构不会添加重复的值

    Set函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。

    // 例一
    const set = new Set([1, 2, 3, 4, 4]);
    [...set]
    // [1, 2, 3, 4]
    
    // 例二
    const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
    items.size // 5
    
    // 例三
    const set = new Set(document.querySelectorAll('div'));
    set.size // 56
    
    // 类似于
    const set = new Set();
    document
     .querySelectorAll('div')
     .forEach(div => set.add(div));
    set.size // 56

    上面代码中,例1和例2都是Set函数接受数组作为参数,例3是接受类似数组的对象作为参数

    上面代码也展示了一种去除数组重复成员的方法。

    // 去除数组的重复成员
    [...new Set(array)]

    上面的方法也可以用于,去除字符串里面的重复字符。

    [...new Set('ababbc')].join('')
    // "abc"

    向 Set 加入值的时候,不会发生类型转换,所以5"5"是两个不同的值。Set 内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===),主要的区别是NaN等于自身,而精确相等运算符认为NaN不等于自身。

    let set = new Set();
    let a = NaN;
    let b = NaN;
    set.add(a);
    set.add(b);
    set // Set {NaN}

    上面代码向 Set 实例添加了两个NaN,但是只能加入一个。这表明,在 Set 内部,两个NaN是相等。

    另外,两个对象总是不相等的。

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

    上面代码表示,由于两个空对象不相等,所以它们被视为两个值。

    Array.from方法可以将 Set 结构转为数组。

    const items = new Set([1, 2, 3, 4, 5]);
    const array = Array.from(items);

    这就提供了去除数组重复成员的另一种方法。

    function dedupe(array) {
      return Array.from(new Set(array));
    }
    
    dedupe([1, 1, 2, 3]) // [1, 2, 3]
  • 相关阅读:
    2020/5/18 BUU_ [GWCTF 2019]xxor
    2020/5/17 BUU_[BJDCTF2020]BJD hamburger competition
    2020/5/17 BUU_[BJDCTF2020]easy
    2020/5/16 BUU_ [ACTF新生赛2020]easyre
    2020.5.16 15:06
    由一道逆向题而引发,IDA调试ELF文件
    【攻防世界】对于parallel-comparator-200的理解的感想
    『攻防世界』:新手区 | when_did_you_born
    『攻防世界』:新手区 | guess number
    『攻防世界』:新手区 | level3
  • 原文地址:https://www.cnblogs.com/woshidouzia/p/11009945.html
Copyright © 2011-2022 走看看