es6学习笔记整理(九)set-map数据结构

Set的用法

set是一种集合;类似数组,不同的是set集合中的元素不能重复
有两种定义方式:
第一种:定义时不加参数

            let list = new Set();
            list.add(1);
            list.add(2);
            console.log(list.size);//2

第一种:定义时加参数

            let arr = [1,2,3,4,5];
            let list = new Set(arr);
            console.log(list.size);//5

set集合中的元素不能重复的情况如下:

            let list = new Set();
            list.add(1);
            list.add(2);
            list.add(1);
            console.log(list);//Set(2) {1, 2} 不报错,相同的元素加不进去

set重要使用,去重

            let arr1 = [1,2,3,1,2];
            let list1 = new Set(arr1);
            console.log(list1);//Set(3) {1, 2, 3}

set是不会进行数据类型的隐形转换,如下事例中,字符串2就不等于数值2

            let arr2 = [1,2,3,1,'2'];
            let list2 = new Set(arr2);
            console.log(list2);//Set(4) {1, 2, 3, "2"}

set实例的方法:

  • add 添加
  • delete 删除
  • clear 清空
  • has 是否存在
            var arr = [1,2,3,4,5];
            let list = new Set(arr);
            console.log(list.has(2));//true
            console.log(list.delete(4),list);//true Set(4) {1, 2, 3, 5}
            list.clear();
            console.log(list);//Set(0) {}

Set实例的方法和遍历:

  • keys(),values(),entries()
  • forEach()
  • for of
            var arr = [1,2,3,4,5];
            let list = new Set(arr);
            for(let key of list.keys()){
                console.log(key);//1 2 3 4 5
            }
            for(let value of list.values()){
                console.log(value);//1 2 3 4 5
            }
            //数组的key和value是一样的。不加values()的情况下,默认values();
            for(let value of list){
                console.log(value);//1 2 3 4 5
            }
            for(let [key,value] of list.entries()){
                console.log(key, value);//1 2 3 4 5
            }
            list.forEach(function (item){
                console.log(item);//1 2 3 4 5
            });
WeakSet的用法

WeakSet和set的区别:

  • 1、WeakSet和set支持的数据类型不一样,WeakSet的元素只能是对象,而set可以是数值,布尔,字符串等。
  • 2、WeakSet是弱引用,通俗的讲,就是在WeakSet中添加的对象, 这个对象不是整个值拷过来,而是地址的引用,它不去检测这个地址是不是已经被垃圾回收机制回收了
  • 3、 WeakSet没有size属性,没有clear()方法。不能遍历
    WeakSet 不能遍历,是因为成员都是弱引用,随时可能消失,遍历不能保证成员的存在。可能刚刚遍历结束,成员就取不到了。
    WeakSet的一个用处是存储DOM节点,而不用担心这些节点从文档移除时,会引起内存的泄露。
            let weakList = new WeakSet();
            let obg = {};
            weakList.add(obg);
//            weakList.add(2);//这样添加就会报错,因为不是对象
            console.log('weakList', weakList);//weakList WeakSet {{…}}
Map的用法

Map是一个对象,类似Object,有key,value。不同的是Object中的key只能是字符串,而Map的key可以使任意数据类型。
Map和Set的用法十分相似,定义方法也有有两种:
第一种没有参数的:

            let map = new Map();
            let arr = [1,2,3];
            map.set(arr,456);
            console.log(map);//Map(1) {Array(3) => 456}
            console.log(map.get(arr));//456

第二种有参数的:new Map([[key,value],[key,value]])

           let map = new Map([['a',123],['b',456]]);
            console.log(map);//Map(2) {"a" => 123, "b" => 456}

这里需要注意:map添加元素使用的是.set(),获取时使用的是.get();
Map常用的属性值:size delete clear has

             let map = new Map([['a',123],['b',456]]);
             console.log(map);//Map(2) {"a" => 123, "b" => 456}
             console.log(map.has('a'));//true
             console.log(map.size);//2
             console.log(map.delete('a'),map);//true Map(1) {"b" => 456}
             map.clear();
             console.log(map);//Map(0) {}

Map常用的方法:keys(),values(),entries()
和for of和forEach()循环

            let a = [["one",1],["two",2]];
            let map = new Map(a);
            map.forEach(function(value, key, map){ //遍历map
                console.log(key + ":" + value); //one:1,two:2
            });
            for(var key of map.keys()){ //返回key的迭代器
                console.log(key); //one,two
            }
            for(var value of map.values()){ //返回值的迭代器
                console.log(value); //1,2
            }
            for(var [key,value] of map.entries()){ //返回项的迭代器
                console.log(value); //1,2
            }
WeakMap的用法

WeakMap与Map的区别:

  • 1、WeakMap接受的key值必须是对象
  • 2、没有size属性。不能使用clear方法
  • 3、不能遍历
    与WeakSet类似
            var weakMap = new WeakMap();
            let obj = {};
            weakMap.set(obj, 123);
            console.log(weakMap.get(obj));//123

你可能感兴趣的:(es6学习笔记整理(九)set-map数据结构)