美文网首页
ECMAScript6--11.Set-Map数据结构

ECMAScript6--11.Set-Map数据结构

作者: 飞菲fly | 来源:发表于2017-10-21 12:02 被阅读21次

    1.数据结构

    • Set的用法

      • 可以当成数组来理解,一种集合;
      • set集合中的元素是不能重复的;(Set这个特性可以做去重;)
    • WeakSet的用法

    • Map的用法

      • 和Object做对比;一个key、一个value值;object的key一定是字符串;
      • Map中的key可以是任意的数据类型;比如数组、一个对象作为它的key都可以;
    • WeakMap的用法

    2.怎么用?什么场景用?

    • Set增加元素用add方法;

    • 获取当前Set变量有几个元素用size属性;

      {
        //向Set里面增加元素的时候要用add这个方法;
        let list = new Set();
        
        list.add(5);
        list.add(7);
        
        //获取当前Set变量有几个元素(可以理解原来数组的长度length);
        console.log('size',list.size); //size  2
      
      }
      
      {
        //Set初始化的时候就把元素初始化进去(默认值的意思);
        let arr = [1,2,3,4,5];
        let list = new Set(arr);
        
        cosole.log('size',list.size); //5
      }
      
    • 添加重复会报错;

      • Set使用很重要的一个场景就是去重;
      {
        let list = new Set();
        list.add(1);
        list.add(2);
        //这个是没有成功添加进去的;添加重复的是不会报错的,只是不会生效而已;
        list.add(1); 
        
        console.log('list',list); //list  Set{1,2}
    
        //Set使用很重要的一个场景就是去重;
        //*它在转换元素的时候,不会做数据类型一个转换;
        let arr =[1,2,3,1,2];
        //let arr =[1,2,3,1,'2'];
        let list2 = new Set(arr);
        
        console.log('unique',list2); //unique Set{1,2,3}
        //console.log('unique',list2); //unique Set{1,2,3,'2'}
     
    }
    
    • Set方法:add、delete、clear、has

      {
        let arr =['add','delete','clear','has'];
        let list = new Set(arr);
        
        console.log('has',list.has('add')); //has true
        console.log('delete',list.delete('add'),list);
        //输出:delete true  Set{"delete","clear","has"}
        list.clear();
        console.log('list',list);//list Set{}
      
      }
      
    • Set遍历(读取)

    {
        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); 
            //value add
            //value delete
            //value clear
            //value has
        }
        
        for(let value of list){
        
            console.log('value',value); 
            //value add
            //value delete
            //value clear
            //value has
        }
        
        for(let [key,value] of list.entries()){
        
            console.log('entries',key,value); 
            //entries add  add
            //entries delete  delete
            //entries clear  clear
            //entries has   has
        }
        
        list.forEach(function(item){
            console.log(item);
        });
        //add
        //delete
        //clear
        //has
    }
    
    • Set和weakSet的区别:
      • WeakSetSet支持的数据类型不一样
        WeakSet元素只能是对象,不能是数值、布尔值、字符串;
      • WeakSet中的对象都是弱引用不会检测这个对象有没有在其他地方用过;不会跟垃圾回收机制挂钩上
        (在WeakSet中添加了一个对象,这个对象不是整个值拷过来,它是一个地址的引用,不会检测这个地址是不是已经被垃圾回收掉了)
      • weakSet没有size属性 ,没有clear方法,不能遍历;
    { 
        let weakList = new WeakSet();
        let arg = {};
        
        weakList.add(arg);
        //weakList.add(2); //会报错,无效的值used in weak set;
        
        console.log('weakList',weakList); //weakList weakSet{Object{}}
    }
    
    • Map添加元素用set方法;set(key,value)
      • Map中的key可以是任意的数据类型;
    {
        let map = new Map();
        let arr = ['123'];
        
        map.set(arr,456);
        console.log('map',map,map.get(arr)); 
        //map Map{["123"] =>456} 456
    }
    
    • 常用的属性值和方法:
      • Map的遍历Set用法是一样的,keys、values、entries、forEach
    {
        let map = new Map([['a',123],['b',456]]);
        console.log('map args',map);
        //map args Map{"a" =>123,"b" =>456}
    
        //获取map对象有多少个元素;
        console.log('size',map.size); //size 2
        
        //获取某一个用get;
        
        //删除:delete
        console.log('delete',map.delete('a'),map);
        //delete  true  Map{"b" =>456}
        
        //清空clear
        console.log('clear',map.clear(),map);
        //clear undefined  Map{}
        
        //Map的遍历和Set用法是一样的,keys、values、entries、forEach
    }
    
    • WeakMap和Map的区别:

      • WeakMap接收的key值必须是对象,不能是其他的;
      • WeakMap没有size属性,不能使用clear
      • WeakMap不能遍历
      {
      let weakmap = new WeakMap();
      
      let o ={};
      weakmap.set(o,123);
      console.log(weakmap.get(o)); //123
      
       }

    相关文章

      网友评论

          本文标题:ECMAScript6--11.Set-Map数据结构

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