• ES6 Set


    它类似于数组,但是成员的值都是唯一的,没有重复的值。

    const s = new Set();
    s.add('123');
    const set = new Set([1, 2, 3, 4, 4]);
    console.log(...set);  //1 2 3 4

    向 Set 加入值的时候,不会发生类型转换,所以5"5"是两个不同的值。

    Set 内部判断两个值是否不同,类似于精确相等运算符(===),主要的区别是向 Set 加入值时认为NaN等于自身,而精确相等运算符认为NaN不等于自身。

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

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

    let set = new Set();
    let a = {name: '111'};
    let b = {name: '111'};
    set.add(a);
    set.add(b);
    console.log(set); // Set [object, object]

    方法:

    has delete

    const s = new Set();
    s.add('123').add(2);
    console.log(s.has('123'));//true
    s.delete(2);
    console.log(s.has(2)); // false

    Array.from方法可以将 Set 结构转为数组。这就提供了去除数组重复成员的另一种方法。

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

    keys()values()entries()

    let set = new Set(['red', 'green', 'blue']);
    
    for (let item of set.keys()) {
      console.log(item);
    }
    // red
    // green
    // blue
    
    for (let item of set.values()) {
      console.log(item);
    }
    // red
    // green
    // blue
    
    for (let item of set.entries()) {
      console.log(item);
    }
    // ["red", "red"]
    // ["green", "green"]
    // ["blue", "blue"]

    foreach()

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

    数组的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}

    如果想在遍历操作中,同步改变原来的 Set 结构,目前没有直接的方法,但有两种变通方法。一种是利用原 Set 结构映射出一个新的结构,然后赋值给原来的 Set 结构;另一种是利用Array.from方法。

    // 方法一
    let set = new Set([1, 2, 3]);
    set = new Set([...set].map(val => val * 2));
    // set的值是2, 4, 6
    
    // 方法二
    let set = new Set([1, 2, 3]);
    set = new Set(Array.from(set, val => val * 2));
    // set的值是2, 4, 6
  • 相关阅读:
    vue-element-admin中table分页改为前台处理
    vue项目如何部署到Tomcat中
    vuex之modules 热加载(hot update)
    持续学习
    css比较特殊选择器汇总(持续更新)
    关于伪元素before after总结
    ajax入门-实现省份下拉框
    super和this关键字的详解
    监听器
    当浏览器被关闭时,session是否被关闭?
  • 原文地址:https://www.cnblogs.com/150536FBB/p/13716820.html
Copyright © 2020-2023  润新知