美文网首页前端开发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笔记

    第一章 入门 一、简介ES6==ES2015特点:功能更强大,结构更简单特性:解构赋值、箭头函数、Set和Map、...

  • ES6 入门之 set 和 map、解构

    1 、解构 解构赋值是ES6中推出的一种高效、简洁的赋值方法 数组解构 对象解构 2、Rest + Spread ...

  • js基础 - 草稿

    1 常用es6 class类继承;箭头函数;let const;新增的数据类型Symbl;set和map;解构赋值...

  • ES6新增Map和Set数据类型

    Map和Set Map 和 Set 是 ES6 标准新增的数据类型 Map JavaScript的对象(Objec...

  • ES6入门之set和map

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

  • ES6基础【一】技能和目标

    一、ES6特性常用几大类: 一、解构赋值二、箭头函数三、Set 和 Map四、异步操作五、类与对象六、模块化 二、...

  • 前端海底捞不定期跟新

    2017年8月 1,ES6 Map和Set Map ES6中新增的数据类型,类似PHP中的键值对形式结构 Set ...

  • 超详细 ES6 代码段

    let和const 解构赋值 正则 字符串 数值 数组 函数 对象 Symbol Set Map Map / Ar...

  • Map和Set

    最新的ES6规范引入了新的数据类型Map Set Map Set

  • 从一个对象中取部分属性组成新的对象

    二十. ES6 中 Set 与 Map

网友评论

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

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