美文网首页
es6学习笔记整理(九)set-map数据结构

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

作者: 尤樊容 | 来源:发表于2018-03-06 16:40 被阅读9次
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数据结构

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

  • es6 set map 读书笔记

    阮一峰 http://es6.ruanyifeng.com/#docs/set-map Set ES6 提供了新的...

  • ES6知识点整理——set-map数据结构

    set ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set函数可以接受一个...

  • ES6(Set-Map数据结构)

    一、Set集合 Set利用add添加元素 获取Set集合的长度用size Set集合有两种定义方法方法一: 方法二...

  • promise

    本文是整理阮一峰大神ES6中 Promise 的学习笔记 目录: Promise.prototype.then()...

  • 《数据结构与算法》学习笔记之总纲

    数据结构与算法学习笔记 一、学习资源 github无疑是我们学习编程与代码知识的一个良好平台,以下整理《数据结构与...

  • 数据结构之数组

    数据结构之数组 这个系列是在学习慕课网玩转数据结构课程的学习笔记,用JAVA语言来重新系统的整理一下数据结构的知识...

  • es6学习笔记整理(十)set-map与数组和对象的比较

    以下所有的对比都是增,删,改,查的对比: Map与Array的对比 首先声明,声明之后有详细的使用方法对比,代码如...

  • ES6从入门到...

    项目中基本上用的都是Es6看阮一峰大神的ECMAScript 6 入门整理一些学习笔记 let ES6 新增了le...

  • 数据结构回顾学习-基础知识

    数据结构回顾学习笔记 这次数据结构回顾笔记,是我对数据结构回顾学习的笔记。回顾过程是参考易百教程网站上数据结构教程...

网友评论

      本文标题:es6学习笔记整理(九)set-map数据结构

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