美文网首页前端开发JavaScript 进阶营
ES6 入门之 set 和 map、解构

ES6 入门之 set 和 map、解构

作者: 不要和我名字一样 | 来源:发表于2017-08-23 14:37 被阅读73次

    1 、解构

    解构赋值是ES6中推出的一种高效、简洁的赋值方法

    • 数组解构
         let [,,third] = [1,2,3];
         console.log(third); //3
    
         let [first,...last] = [1,2,3];
         console.log(last); //[2,3]
    
    • 对象解构
    //   对象的解构赋值
       let {name,sex} = {"name":"huangsen","sex":"nan"};
       console.log(name);
    

    2、Rest + Spread

    • rest
     function f(x, ...y) {
           console.log(x * y.length);
      }
     f(3, "hello","222","111"); 
    
    • spread
     function add(x,y,z) {
           console.log(x+y+z);
     }
     add(...[1,2,3]);//6
    

    3、Map + Set + WeakSet

    Set对象是一组不重复的值,重复的值将被忽略,值类型可以是原始类型和引用类型WeakSet也是不重复的值的集合,但是只能用来存放对象。Set的用法:set数据类型的元素,必须是唯一的;添加重复的元素不会报错,只是不会生效;Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现。如果你需要“键值对”的数据结构,Map比Object更合适。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。

    • Set
          //有四个方法:
          1.  add(value):添加某个值,返回Set结构本身。
          2.  delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
          3.  has(value):返回一个布尔值,表示该值是否为Set的成员。
          4.  clear():清除所有成员,没有返回值
    
          let s = new Set();
          s.add("hello").add("goodbye").add("hello");
          console.log(s.size);//2
          console.log(s.has("hello"))  //true
    
    
    • set遍历
            let s = new Set([1,2,3,4,5,6]);
            s.forEach((item)=>{
                 console.log(item)//1,2,3,4,5,6
            });
    
    • Map
       //   map常用的属性值和方法
       1.  map.size 长度
       2.  set设置,get获取
       3.  delete() 删除; clear()清空
            // Maps
            let m = new Map();
            m.set("hello", 42);
            m.set(s, 34);
            console.log(m.get(s)); //34
            console.log(m.get("hello"))  //42
    

    map的其他方法:http://www.cnblogs.com/dagaoxiaozheng/p/6605981.html

    • Weak Sets
           var ws = new WeakSet();
           ws.add({ data: 42 });
    

    4、WeakSet 和 Set 的区别:

    • WeakSet的成员只能是对象,而不能是其他类型的值
    • WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于WeakSet之中。这个特点意味着,无法引用 WeakSet 的成员,因此WeakSet 是不可遍历的。
    • WeakSetset支持的数据类型不一样;
    • WeakSet中的对象都是若引用;不会检测地址是否被垃圾回收掉;
    • 他的属性,没有size属性,没有clear方法,不能遍历;

    5、WeakMap的用法

    -weakMapmap的区别:

    • 前者接收的值只能是对象
    • 他没有set属性,不能使用clear()
    • 不能遍历; 跟weakSetset的区别一样;

    6、Map的用法

    • map的属性名可以是任意数据类型;
    • map增加值,用set,获取值用get

    7、WeakMap 和 WeakSet 被设计来完成与Map、Set几乎一样的行为,除了以下一些限制:

    • WeakMap只支持new、has、get、setdelete
    • WeakSet只支持new、has、adddelete
    • WeakSet的值和WeakMap的键必须是对象。
    • 还要注意,这两种弱集合都不可迭代,除非专门查询或给出你感兴趣的键,否则不能获得一个弱集合中的项。

    8、求两个集合的交集、并集、差集

      let set1 = new Set([1, 2, 3, 4, 5, 6]);
      let set2 = new Set([4, 5, 6, 7, 8, 9]);
    
    • 并集
      //并集
            let union = new Set([...set1, ...set2]);
            union.forEach((item)=>{
                console.log(item);//1,2,3,4,5,6,7,8,9
            });
    
    • 交集
       //交集
            let intersect = new Set([...set1].filter(x => set2.has(x)));
            intersect.forEach((item)=>{
                console.log('交集:'+item);//4,5,6
            });
    
    • 差集(一般地,记A,B是两个集合,则所有属于A且不属于B的元素构成的集合,叫做集合A减集合B(或集合A与集合B之差),类似地,对于集合A、B,我们把集合{x∣x∈A,且x∉B}叫做A与B的差集)
      //差集
            let intersect1 = new Set([...set1].filter(x => !set2.has(x)));
            intersect1.forEach((item)=>{
                console.log('差集:'+item);//1,2,3
            });
    

    9、数组去重

    • Set + Array.from() 数组去重
            let arr = [12,13,12,11,0];
            let arr1 = Array.from(new Set(arr));
            console.log(arr1);//输出:12,13,11,0
    
    • …[拓展运算符] + Set 数组去重
            let arr = [12,13,12,11,0];
            let arr1 = [...new Set(arr)];
            console.log(arr1);
    

    相关文章

      网友评论

        本文标题:ES6 入门之 set 和 map、解构

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