es6-Set、Map

Set

  • 定義
    這是一種無重複值的有序列表(如果添加了重複項相當於添加無效,對象除外,因爲他們不會被轉爲字符串類型相同的對象在其中就是兩個object,也沒有類型轉換)。Set允許對它包含的數據進行快速訪問,從而增加了一個追蹤離散值的更有效方式。
  • 基本操作與方法
     let set = new Set(); // 創建set對象
     set.add(5);   // 添加元素,也可以添加對象
     set.add("5"); // 沒有類型轉換所以可以添加進去
     console.log(set.size);  // 
     console.log(set.has(5))  // 返回true
     set.delete(5); // 刪除指定元素
     set.clear();   //刪除所有元素
     // 也可以用數組初始化set對象,同樣的會自動忽略相同值
     let set1 = new Set([1, 2, 3, 4, 5, 5, 5, 5]);  
    
  • forEach()
    循環遍歷set中元素
     let set = new Set([1, 2, 3]);
     set.forEach(function(vaule, key, ownSet){
         console.log(vaule);    
     });// 第一、二個參數爲set對象首元素,第三個參數爲set自身
    
    forEach中回調函數要使用this值時在整個的第二個參數加上this,或者使用箭頭函數。
     set.forEach((value) => this.output(value));
    
  • set對象轉換爲數組(剩餘運算符實現)
     let set = new Set([1, 2, 3]);
     let arr = [...set];
    
    那麼以這種方式我們多了一種數組去重的辦法:
     function deWeight(arr) {
         return [...(new Set(arr))];
     } // 將數組對象轉化爲set對象存儲在轉爲數組
     let arr = [1, 1, 1, 1, 1, 2];
     console.log(deWeight(arr));
    
  • weakSet
    是set對象的一個弱引用,set方法存入的對象當對象指定在外部指定去除時set對象內部任然會有,weakSet更加像是一個指向性的對象外部去除內部也不會存在
    幾點區別
    • weakSet各種方法只能傳入對象
    • 沒有forEach方法

Map

  • 定義
    Map更像是一種數據關聯,爲可以爲一個對象設置一個鍵值一起存儲到Map對象,然後通過鍵值去訪問到數據,json中鍵值只能是字符型,但Map鍵值都可以。
  • 基本操作方法
    存入爲set、訪問爲get,都是通過操作鍵值(鍵值可以是對象),其他與set對象相同。
     // 定義添加
     let map = new Map();
     map.set(鍵值,鍵值對應值);
     // 直接添加
     let map = new Map([["name", "Nicholas"], ["age", 25]]);
    
  • Map的forEach方法
    用法與set對象一致,相對於理解上Map的該方法更能說通三個參數爲鍵值、鍵值對應值、對象本身。
  • weakMap
    與前面所介紹weakSet的各項特點一致。簡化了構建私有化對象的問題,這邊是書本上看到的一個私有化案例還不是很懂意思,還需琢磨一下。
     let Person = (function() {
         let privateData = new WeakMap();
         function Person(name) {
             privateData.set(this, { name: name });
         }
         Person.prototype.getName = function() {
             return privateData.get(this).name;
         };
         return Person;
         }());
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章