• js中ES6的Set的基本用法


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

    const s = new Set();
    
    [2,3,5,4,5,2,2].forEach(x => s.add(x));
    // Set结构不会添加重复的值
    
    for(let i of s) {
      console.log(i);
    }
    
    
    // ## 初始化
    // 例一 可以接受一个数组作为参数
    const set = new Set([1,2,3,4,4,]);
    
    // ...将一个数组转为用逗号分隔的参数序列
    console.log([...set]);
    
    // 例二
    const items = new Set([1,2,3,4,5,5,5,5,]);
    console.log(items.size);
    
    
    // 例三 可以接受具有iterable接口的其他数据结构作为参数
    const set2 = new Set(document.querySelectorAll('div'));
    console.log(set.size);
    
    // 类似于
    const set2 = new Set();
    document
        .querySelectorAll('div')
        .forEach(div => set.add(div));
    console.log(set.size);
    
    // set中NaN等于自身,其余比较相当于 ===
    let set3 = new Set();
    let a = NaN;
    let b = NaN;
    set3.add(a);
    set3.add(b);
    console.log(set3)
    
    // 两个对象总是不相等的
    let set4 = new Set();
    set4.add({});  // 1
    console.log(set4.size);
    
    set4.add({});  // 2
    console.log(set4.size);
    

      

    const s = new Set();
    
    s.add(1).add(2).add(2);
    
    console.log(s.size);
    
    console.log(s.has(1));
    console.log(s.has(2));
    console.log(s.has(3));
    
    s.delete(2);
    console.log(s.has(2));
    
    // set转数组
    const items = new Set([1,2,3,4,5]);
    const array = Array.from(items);
    console.log(array);
    
    // 去除数组重复成员
    function dedupe(array) {
      return console.log(Array.from(new Set(array)));
    }
    
    dedupe([1,1,2,3]);
    
    let set = new Set(['red', 'green', 'blue']);
    
    // 返回键名
    for(let item of set.keys()) {
      console.log(item);
    }
    
    // 返回键值
    for(let item of set.values()) {
      console.log(item);
    }
    // set 键名=键值
    
    // 返回键值对
    for(let item of set.entries()){
      console.log(item);
    }
    
    // 可以直接用 for of遍历Set
    // for in 和 for of的区别是:in 是遍历对象,of是遍历值
    for (let x of set) {
      console.log(x);
    }
    
    // set也有forEach()方法
    set.forEach((value, key) => console.log(key + ' : ' + value));
    // 此处forEach方法的参数是一个处理函数。
    
    // 数组的 map 和 filter 方法也可以间接用于Set
    let s = new Set([1,2,3]);
    
    // map 将原数组映射成新数组
    s = new Set([...s].map(x => x * 2));
    console.log(s);
    
    // filter返回过滤后的新数组
    s = new Set([...s].filter(x => (x % 3) ==0));
    console.log(s);
    
    // 实现并集、交集、差集
    let a = new Set([1,2,3]);
    let b = new Set([4,3,2]);
    
    let union = new Set([...a, ...b]);
    console.log(union);
    
    let intersect = new Set([...a].filter(x => b.has(x)));
    console.log(intersect);
    
    let difference = new Set([...a].filter(x => !b.has(x)));
    console.log(difference);
    
    // 在遍历操作中,同步改变原来的Set结构的两种变通方法
    
    // 1.利用原Set结构映射出一个新的结构,然后赋值给原来的Set结构
    let set1 = new Set([1,2,3]);
    set1 = new Set([...set1].map(val => val *2));
    console.log(set1);
    
    // 2.利用Array.from
    let set2 = new Set([1,2,3]);
    set2 = new Set(Array.from(set2, val => val * 2));
    console.log(set2);
    

      

      

  • 相关阅读:
    2018——测试与信仰
    面试必备----测试用例笔试题分享
    软件测试人员必备网络知识(一):什么是cookie?
    Postman和Selenium IDE开局自带红蓝BUFF属性,就问你要还是不要
    【Loadrunner】LR参数化:利用mysql数据库里面的数据进行参数化
    因果图法设计测试用例
    场景法设计测试用例
    Linux Centos7下安装Python
    Vmware安装与VMware下Linux系统安装
    Python运算符与表达式
  • 原文地址:https://www.cnblogs.com/wjcoding/p/11690886.html
Copyright © 2020-2023  润新知