• ES6 Set结构和Map结构(上)


    Set

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

    var s = new Set();
    [2,3,5,4,5,2,2].map(x=>s.add(x))
    for(i of s){
        console.log(i);//2 3 5 4
    }
    //上面的代码通过add方法向Set结构加入成员,结果表明Set结构不会添加重复的值。
    
    var set = new Set([1,2,3,4,4]);
    //[1,2,3,4]
    var items = new Set([1,2,3,4,5,5,5,5]);
    items.size//5
    

    Set实例的属性和方法

    Set结构的实例有如下属性:
    Set.prototype.constructor:构造函数,默认就是Set函数
    Set.prototype.size:返回Set实例的成员总数

    Set实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)
    add(value):添加某个值,返回Set结构本身
    delete(value):删除某个值,返回一个布尔值,表示删除是否成功
    has(value):返回一个布尔值,表示参数是否为Set的成员
    clear():清除所有成员,没有返回值
    s.add(1).add(2).add(2);
    //注意2被加入了两次
    s.size//2
    s.has(1)//true
    s.has(2)//true
    s.has(3)//false

    var properties = {
        "width":1,
        "height":1
    };
    if(properties[someName]){
        //do something
    }
    //Set的写法
    var properties = new Set();
    properties.add("width");
    properties.add("height");
    if(properties.has(someName)){
        //do something
    }
    
    

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

    var items = new Set([1,2,3,4,5]);
    var array = Array.from(items);
    //这里提供了一种去除数组的重复元素的方法
    function dedupe(array){
        return Array.from(new Set(array));
    }
    dedupe([1,2,2,3]);//[1,2,3]
    

    遍历操作

    Set结构的实例有4个遍历方法,可以用来遍历成员
    ——keys():返回一个键名的遍历器
    ——values():返回一个键值的遍历器
    ——entries():返回一个键值对的遍历器
    ——forEach():使用回调函数遍历每个成员。
    keys方法、values方法、entries方法返回的都是遍历器对象,由于Set结构没有键名,只有键值,或者说键名和键值相同,所以keys方法和values方法等效

    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']
    

    Set结构的实例默认可遍历,其默认遍历器生成函数就是它的values方法
    Set.prototype[Symbol.iterator] === Set.prototype.values //true
    这就意味着可以省略values方法,直接使用for—of循环遍历Set

    let set = new Set(['red','green','blue']);
    for(let x of set){
        console.log(x);
    }
    //red
    //green
    //blue
    

    由于扩展运算符(...)内部使用for...of循环,所以也可以用于Set结构

    let set = new Set(['red','green','blue']);
    let arr = [...set];
    console.log(arr);
    //['red','green','blue']
    

    这也提供了一种简便的去除数组重复元素的方法

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

    而且,数组的map和filter方法也就可以用于Set

    let set = new Set([1,2,3]);
    set = new Set([...set].map(x=> x*2));
    console.log(set);//[2,4,6]
    
    let set = new Set([1,2,3,4,5]);
    set = new Set([...set].filter(x=>(x%2)==0));
    console.log(set);//[2,4]
    

    Set实现并集,交集,差集

  • 相关阅读:
    ip代理投票
    linq小笔记;
    c#类的执行顺序
    IEnumerable、GetEnumerator、IEnumerator的理解
    English随笔1
    AudioServicesPlaySystemSound音频服务—IOS开发
    iOS开发之压缩与解压文件
    xcode添加Cocos2d
    使用CoreTelephony获得SIM卡网络运营商名称
    iOS设备进行定位?
  • 原文地址:https://www.cnblogs.com/sminocence/p/6839218.html
Copyright © 2020-2023  润新知