ES6-08:新增數據結構—Set、WeakSet、Map、weakMap

ES6新增了四類數據結構:分別是SetWeakSetMapWeakMap.數組

1. Set —沒有重複成員元素的數組;

  • 本質:Set自己是一個構造函數;接收一個具備iterable接口數據結構的參數,用來生成一個沒有重複元素的數組;
let nums=new Set([1,2,3,4,3,2]);//[1,2,3,4]
nums.add(2);//[1,2,3,4]
nums.add('2');//[1,2,3,4,'2']
nums.add({});//[1,2,3,4,'2',{}]  Set添加元素時不會發生類型轉換,
nums.add({});//[1,2,3,4,'2',{},{}]  Set添加的對象總不相等
  • 2個屬性:
// ① Set.prototype.constructor:返回Set的構造函數
// ② Set.prototype.size:返回Set實例的成員個數
  • 兩類8個方法:操做方法(4種)+遍歷方法(4種)

Set.add(value):向Set實例添加值value,返回Set結構自己 ;
Set.delete(value):向Set實例刪除值value,返回boolean, 成功爲true,失敗返回false;
Set.has(value):檢查Set實例是否含有值value,返回boolean,包含返回true,不包含返回false
Set.clear():清楚Set實例的全部成員,無返回值;數據結構

Set.keys():返回鍵名的遍歷器;
Set.values():返回鍵值的遍歷器;
Set.entries():返回鍵值對的遍歷器;
Set.forEach((value,key)=>{},thisObj):使用回調函數遍歷每一個成員函數

  • 使用場景:①數組去重、②求數組的交集、並集、差集
// ①數組去重
let arr=[1,2,3,4,3,2,1];
let b=[...arr];//[1,2,3,4]
let a=Array.from(new Set(arr));//[1,2,3,4]
// ②數組運算

let arr1=new Set([1,2,3,4]);
let arr2=new Set([3,4,5,6]);
let union=new Set([...arr1,...arr2]);//[1,2,3,4,5,6]
let intersect=new Set([...arr1].filter(value=>b.has(value)));//[3,4]
let diffrence=new Set([...arr1].filter(value=>!b.has(value)));//[1,2]

2. WeakSet—成員只能是對象的Set

  • WeakSet的成員只能是對象不能是其餘類型值;
  • WeakSet中的對象都是弱引用,即垃圾回收機制不考慮WeakSet對該對象的引用;this

    弱引用,即當一個WeakSet實例的成員引用對象A時,當其餘對象不在引用對象A,JS的垃圾回收機制便會自動回收該對象佔用的內存,不考慮WeakSet實例是否還在引用;弱引用的對象隨時可能消失,沒法保證成員的存在,所以WeakSet相比較Set數據結構,沒有clear()方法、沒有size屬性、也沒有遍歷方法;prototype

3. Map——鍵值對的鍵名、鍵值均可覺得任意數據結構的對象;

ES5中對象(Object)本質上都是簡直對的集合(Hash結構),但只能用字符串做爲鍵名;Map對象能夠用對象做爲鍵名,實現真正的值-值對;對於鍵名、鍵值均爲對象的Map數據,在內存中存儲時,其實是兩個對象的索引值對索引值的對應關係映射;code

  • 屬性:Map.size返回Map實例成員的總數;
  • 方法:操做方法(5種)+遍歷方法(4種)
    Map.set(key,value):設置key值對應的值,若是key存在,則覆蓋原有值;
    Map.get(key):獲取鍵名爲key的鍵值;
    Map.has(key):檢查鍵名key是否存在Map實例中,返回boolean值,若存在返回true,不存在返回false;
    Map.delete(key):刪除鍵名爲key的屬性,返回boolean值,若刪除成功返回true,失敗返回false;
    Map.clear():清除Map實例的全部成員,無返回值
    Map.keys():返回鍵名的遍歷器
    Map.values():返回鍵值的遍歷器
    Map.entries():返回全部成員的遍歷器
    Map.forEach((value,key,map)=>{},thisObj):遍歷Map的全部成員對象

  • Map 與其餘數據類型之間相互轉換
    。。。
    。。。索引

4.WeakMap—鍵名只能爲對象的Map,弱引用

  • WeakMap的成員的鍵名只能是對象不能是其餘類型值;
  • WeakMap中的鍵名和值都是弱引用,即垃圾回收機制不考慮WeakSet對該對象的引用;
相關文章
相關標籤/搜索