ECMAScript6--11.Set-Map數(shù)據(jù)結(jié)構(gòu)

1.數(shù)據(jù)結(jié)構(gòu)

  • Set的用法

    • 可以當(dāng)成數(shù)組來(lái)理解,一種集合;
    • set集合中的元素是不能重復(fù)的;(Set這個(gè)特性可以做去重;)
  • WeakSet的用法

  • Map的用法

    • 和Object做對(duì)比;一個(gè)key、一個(gè)value值;object的key一定是字符串;
    • Map中的key可以是任意的數(shù)據(jù)類型;比如數(shù)組、一個(gè)對(duì)象作為它的key都可以;
  • WeakMap的用法

2.怎么用?什么場(chǎng)景用?

  • Set增加元素用add方法;

  • 獲取當(dāng)前Set變量有幾個(gè)元素用size屬性;

    {
      //向Set里面增加元素的時(shí)候要用add這個(gè)方法;
      let list = new Set();
      
      list.add(5);
      list.add(7);
      
      //獲取當(dāng)前Set變量有幾個(gè)元素(可以理解原來(lái)數(shù)組的長(zhǎng)度length);
      console.log('size',list.size); //size  2
    
    }
    
    {
      //Set初始化的時(shí)候就把元素初始化進(jìn)去(默認(rèn)值的意思);
      let arr = [1,2,3,4,5];
      let list = new Set(arr);
      
      cosole.log('size',list.size); //5
    }
    
  • 添加重復(fù)會(huì)報(bào)錯(cuò);

    • Set使用很重要的一個(gè)場(chǎng)景就是去重;
  {
    let list = new Set();
    list.add(1);
    list.add(2);
    //這個(gè)是沒(méi)有成功添加進(jìn)去的;添加重復(fù)的是不會(huì)報(bào)錯(cuò)的,只是不會(huì)生效而已;
    list.add(1); 
    
    console.log('list',list); //list  Set{1,2}

    //Set使用很重要的一個(gè)場(chǎng)景就是去重;
    //*它在轉(zhuǎn)換元素的時(shí)候,不會(huì)做數(shù)據(jù)類型一個(gè)轉(zhuǎn)換;
    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的區(qū)別:
    • WeakSetSet支持的數(shù)據(jù)類型不一樣;
      WeakSet元素只能是對(duì)象,不能是數(shù)值、布爾值、字符串;
    • WeakSet中的對(duì)象都是弱引用,不會(huì)檢測(cè)這個(gè)對(duì)象有沒(méi)有在其他地方用過(guò);不會(huì)跟垃圾回收機(jī)制掛鉤上
      (在WeakSet中添加了一個(gè)對(duì)象,這個(gè)對(duì)象不是整個(gè)值拷過(guò)來(lái),它是一個(gè)地址的引用,不會(huì)檢測(cè)這個(gè)地址是不是已經(jīng)被垃圾回收掉了)
    • weakSet沒(méi)有size屬性 ,沒(méi)有clear方法,不能遍歷;
{ 
    let weakList = new WeakSet();
    let arg = {};
    
    weakList.add(arg);
    //weakList.add(2); //會(huì)報(bào)錯(cuò),無(wú)效的值used in weak set;
    
    console.log('weakList',weakList); //weakList weakSet{Object{}}
}
  • Map添加元素用set方法;set(key,value)
    • Map中的key可以是任意的數(shù)據(jù)類型;
{
    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對(duì)象有多少個(gè)元素;
    console.log('size',map.size); //size 2
    
    //獲取某一個(gè)用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的區(qū)別:

    • WeakMap接收的key值必須是對(duì)象,不能是其他的;
    • WeakMap沒(méi)有size屬性,不能使用clear;
    • WeakMap不能遍歷
    {
    let weakmap = new WeakMap();
    
    let o ={};
    weakmap.set(o,123);
    console.log(weakmap.get(o)); //123
    
     }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容