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

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数据结构)