• ES6 set与map详解


    // set 的创建
    // (1)成员不能重复
    // (2)只有键值没有键名,类似数组
    // (3)可以遍历,方法有add, delete,has
    // add(value) – 追加一个新的元素到Set中,返回Set对象,我们可以使用链式调用。
    // clear() – 清空Set中的所有元素。
    // delete(value) – 删除Set中的元素。
    // entries()– 返回一个新的Iterator(可迭代对象)包含[value, value] 。
    // forEach(callback [, thisArg]) – 像数组的forEach一样,并且每次调用会将this设置为thisArg
    // has(value) – 判断Set中是否有该元素,返回true/false
    // keys() – 和values()方法一样。
    // [@@iterator] – 返回一个新的Iterator object(可迭代对象)。


    const setObject = new Set();
    //向set中添加元素 可以是任何元素
    setObject.add(3);
    setObject.add('哥');
    //添加对象
    setObject.add({ a: 1 });
    //添加数组
    setObject.add([1, 2, 3]);
    // console.log(setObject) // 打印结果 Set(4) { 3, '哥', { a: 1 }, [ 1, 2, 3 ] }   4代表元素的长度
    //has  检查set里面有没有某个元素
    // console.log(setObject.has('哥')); // true  
    // console.log(setObject.has('哥1')); // false  
    //set 会去重相同的元素  
    setObject.add(3);
    setObject.add(3);
    setObject.add(2);
    setObject.add(2); // 向set的后面添加
    // console.log(setObject) //打印结果  { 3, '哥', { a: 1 }, [ 1, 2, 3 ], 2 }
    //set  与数组的转换    通过...拓展运算符将set变更为数组形式
    const arry = [...setObject];
    //set 的 delete
    setObject.delete('哥')
        // console.log(setObject) //打印结果  { 3, , { a: 1 }, [ 1, 2, 3 ], 2 }
        // console.log(arry) //[ 3, '哥', { a: 1 }, [ 1, 2, 3 ], 2 ]

    //利用 set求交集  
    const set1 = new Set([1, 2, 3, 4, 5, 5, 5]);
    const set2 = new Set([4, 5, 6, 7, 8, 9]);
    // console.log(set1)
    // console.log(set2)
    //迭代整个set
    //便利其中一个set 然后利用has 属性相同的就返回true 完成交集
    let intersection = new Set([...set1].filter((x) => set2.has(x)));
    // console.log(intersection) //两交集的交集 {4,5}
    //找差集
    let intersection2 = new Set([...set1].filter((x) => !set2.has(x)));
    // console.log(intersection2) //    set1  在 set2 中的差集
    let intersection3 = new Set([...set2].filter((x) => !set1.has(x)));
    // console.log(intersection3) //    set2  在 set1 中的差集
    let mySet = new Set([1, "some text", { "a": 1, "b": 2 }, { "a": 1, "b": 2 }])

    // for (let item of mySet) console.log(item); //输出顺序 依次  1  some text { a: 1, b: 2 } { a: 1, b: 2 }   (键与值相等)
    // 使用.size来获取Set的长度,这和数组length不同
    // console.log(mySet.size)
    //
    //Map: map类似于对象    set2.has(x)
    // (1)本质上是健值对的集合,类似集合
    // (2)可以遍历,可以跟各种数据格式转换

    // map.has('a')        //true
    // map.get('a')        //a
    // map.set('c': 3)        //Map(3) {'a' => 1, 'b' => 2, 'c' => 3}
    // map.delete('a')    //Map(2) {'b' => 2, 'c' => 3}
    // map.size        //2
    // map.keys()    //MapIterator {'a', 'b', 'c'} 可迭代对象
    // map.values()    //MapIterator {1, 2, 3} 可迭代对象
    // map.entries()    //MapIterator {'a' => 1, 'b' => 2, 'c' => 3} 可迭代对象
    // map.clear();    //清空map

    const mapObject = new Map([
        ['a', 1],
        ['b', 2]
    ]);
    // 1. map的遍历
    mapObject.forEach((value, key) => {
        // console.log(value, key)
        // 1 a
        // 2 b
    });
    // 2. map转换数组  
    // (1)
    // console.log([...mapObject]); //[ [ 'a', 1 ], [ 'b', 2 ] ]
    // (2)
    // console.log(Array.from(mapObject)) //[ [ 'a', 1 ], [ 'b', 2 ] ]
    // (3)
    let arr = [];
    for (var key of mapObject) {
        arr.push(key);
    }
    // console.log(arr); //[ [ 'a', 1 ], [ 'b', 2 ] ]

    //3. map克隆/合并
    let original = new Map([
        [1, 'one']
    ]);

    let clone = new Map(original);

    console.log(clone.get(1)); // one
    console.log(original === clone); // false. 浅比较 不为同一个对象的引用
  • 相关阅读:
    java.util.Arrays类详解
    爬虫
    学习Spring框架(一)
    JAVA的网络编程
    Thread直接调用run()和start()方法的区别
    JDK JRE JVM 区别
    TCP , HTTP, IP
    一些常用的端口
    PATH CLASSTH JAVA_HOME
    浅谈Linux内存管理机制
  • 原文地址:https://www.cnblogs.com/shenbo666/p/16250250.html
Copyright © 2020-2023  润新知