美文网首页
ES6(Set-Map数据结构)

ES6(Set-Map数据结构)

作者: KATENGC | 来源:发表于2020-04-28 17:06 被阅读0次
    一、Set集合
    • Set利用add添加元素
    • 获取Set集合的长度用size

    Set集合有两种定义方法
    方法一:

    {
        let list = new Set();
        //Set集合要通过add添加元素
        list.add(5);
        list.add(7);
    
        //获取Set的长度要用size
        console.log('size', list.size);//2
    }
    

    方法二:

    {
        let arr = [1, 2, 3, 4, 5];
        let list = new Set(arr);
    
        console.log('size', list.size);//5
    }
    
    二、Set集合的元素是唯一的
    {
        let list = new Set();
        list.add(1);
        list.add(2);
        list.add(1);//不生效
    
        console.log('list', list);//{1, 2}
    
        //利用这个特性,可用于元素去重
        let arr = [1, 2, 3, 1, 2];
        let list2 = new Set(arr);
    
        console.log('unique', list2);//{1, 2, 3}
    
        //需要注意,Set不会做元素类型的转换
        let arr2 = [1, 2, 3, 1, '2'];
        let list3 = new Set(arr2);//此处Set集合中数值2 和 字符串2 不是同一个元素,不会被去重
    
        console.log('unique', list3);//{1, 2, 3, "2"}
    }
    
    三、Set集合add delete clear has 方法
    {
        let arr = ['add', 'delete', 'clear', 'has'];
        let list = new Set(arr);
    
        console.log('has', list.has('add'));//true
        console.log('delete', list.delete('add'), list);//true {"delete", "clear", "has"}
        list.clear();
        console.log('clear', list);//{}
    }
    
    四、Set集合的遍历
    {
        let arr = ['add', 'delete', 'clear', 'has'];
        let list = new Set(arr);
        //方法一
        for (let key of list.keys()) {
            console.log('keys', key);
        }
        //方法二
        for (let value of list.values()) {
            console.log('values', value);
        }
        //方法三 此处不加values 遍历返回的也是value,同方法二
        for (let value of list) {
            console.log('values', value);
        }
        //方法四
        for (let [key, value] of list.entries()) {
            console.log('entries', key, value);
        }
    
        list.forEach(item => {
            console.log(item);
        })
    }
    
    五、WeakSet 和 Set

    WeakSet和Set 的区别

    • WeakSet 和 Set 支持的数据类型不一样,WeakSet只能接收对象
    • WeakSet的对象是弱引用,不会跟垃圾回收机制挂钩
    • WeakSet没有clear方法、没有set属性,不能遍历
    {
        let weakList = new WeakSet();
    
        let arg = {a: 1, b: 2};
        weakList.add(arg);
    
        // weakList.add(2);//会报错Invalid value used in weak set,因为WeakSet只能接收对象
    
        console.log('weakList', weakList);
    }
    
    六、Map
    • Map利用map.set(key,value)添加元素
    • 获取Map的值用map.get(key)的方式

    Map的定义方法:

    {
        let map = new Map();
        let arr = ['123'];
        //Map添加元素用set
        map.set(arr, 456);
    
        //Map用get获取值
        console.log('map', map, map.get(arr));
    }
    

    方法二

    {
        //注意结构:接收数组类型,数组里面还是数组
        let map = new Map([['a', 123], ['b', 456]]);
        console.log('map', map);
    
        //获取map的长度 用size
        console.log('size', map.size);
        console.log('delete', map.delete('a'), map);
        console.log('clear', map.clear(), map);
    
    //Map的遍历同Set,此处不举例
    }
    

    另外:Map的set delete clear方法 与 Set相同;Map的遍历与 Set 相同

    {
        //注意结构:接收数组类型,数组里面还是数组
        let map = new Map([['a', 123], ['b', 456]]);
        console.log('map', map);
    
        console.log('delete', map.delete('a'), map);
        console.log('clear', map.clear(), map);
    }
    
    七、WeakMap 和 Map

    WeakMap 和 Map的区别(同WeakSet 和 Set的区别)

    • WeakMap 和 Map 支持的数据类型不一样,WeakMap只能接收对象
    • WeakMap的对象是弱引用,不会跟垃圾回收机制挂钩
    • WeakMap没有clear方法、没有set属性,不能遍历
    {
        let weakmap = new WeakMap();
    
        let o = {};
        weakmap.set(o, 124);
        console.log(weakmap.get(o));//124
    }
    

    相关文章

      网友评论

          本文标题:ES6(Set-Map数据结构)

          本文链接:https://www.haomeiwen.com/subject/lqhbwhtx.html