美文网首页
ES6知识点整理——set-map数据结构

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

作者: 小姑凉喜欢无脸男 | 来源:发表于2018-09-09 20:11 被阅读24次
    set

    ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
    Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化。

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

    四个操作方法:
    add(value):添加某个值,返回Set结构本身。
    delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
    has(value):返回一个布尔值,表示该值是否为Set的成员。
    clear():清除所有成员,没有返回值

    set内部的元素可以遍历for...of...

    {
      let arr=['add','delete','clear','has'];
      let list=new Set(arr);
    
      for(let key of list.keys()){
        console.log('keys',key);//keys add keys delete keys clear  keys has
      }
      for(let value of list.values()){
        console.log('value',value);////keys add keys delete keys clear  keys has
      }
      for(let [key,value] of list.entries()){
        console.log('entries',key,value);////keys add add  keys delete delete  keys clear clear  keys has has
      }
    
      list.forEach(function(item){console.log(item);})//add delete clear has
    }
    
    {
    //说明每个值都是唯一的
      let list = new Set();
      list.add(1);
      list.add(2);
      list.add(1);
      console.log('list',list);//list中只用1和2两个值,重复添加的数字不会报错只是不生效,这样就可以用来数组去重
    
      let arr=[1,2,3,1,2];
      let list2=new Set(arr);
      console.log('unique',list2);//unique set{1,2,3} ,但不会做数据类型的处理
    
      let arr=[1,2,3,1,'2'];
      let list2=new Set(arr);
      console.log('unique',list2);//unique set{1,2,3,"2"}
    }
    
    weakset

    WeakSet结构与Set类似,也是不重复的值的集合。

    WeakSet和Set的区别:
    ·WeakSet的成员只能是对象,而不能是其他类型的值
    ·WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于WeakSet之中。这个特点意味着,无法引用WeakSet的成员,因此WeakSet是不可遍历的。
    ·没有clear方法,没有size属性,不能遍历

    {
      let weakList=new WeakSet();
      let arg={};
      weakList.add(arg);
      // weakList.add(2);
      console.log('weakList',weakList); //weakList weakest{object{}}
    }
    
    map

    Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现。如果你需要“键值对”的数据结构,Map比Object更合适。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。

    实例属性和方法:size、set、get、has、delete、clear
    遍历方法:keys()、values()、entries()、forEach()

    {
      let map = new Map();
      let arr=['123'];
      map.set(arr,456);
      console.log('map',map,map.get(arr));//map Map{["123"] => 456} 456
    }
    {
      let map = new Map([['a',123],['b',456]]);
      console.log('map args',map);//map args Map{"a"=>123,"b"=>456}
      console.log('size',map.size);//size 2
      console.log('delete',map.delete('a'),map);//delete Map{]"b"=>456}
      console.log('clear',map.clear(),map);//clear Map{}
    }
    
    weakmap

    weakmap所接收的key也必须是对象,不能是其他的
    也没有set属性,没有size方法,不能遍历

    {
      let weakmap=new WeakMap();
      let o={};
      weakmap.set(o,123);
      console.log(weakmap.get(o));//123
    }
    

    相关文章

      网友评论

          本文标题:ES6知识点整理——set-map数据结构

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