1.Set ——(1)數組去重的另一種方法:Array.from(new Set(array)),
(2)Set可以很容易實現並集,交集和差集
Set方法能夠去重
Set的操作方法有:add(),delete(),has(),clear()
Set轉爲數組:Array.from()。
Set的四個遍歷方法:keys(),values(),entries(),forEach()
前兩個用法相同,第三個方法返回的是鍵值對的遍歷器,Set結構鍵名和鍵值是同一個值,forEach()方法參數依次爲鍵值,鍵名,集合本身。
E.g: let set = new Set([‘red’,’green’,’blue’]);for(let i of set.values()) {console.log(i);}
//red,green,blue依次出現,可以省略values()方法,因爲是默認方法
遍歷的應用 擴展運算符(...)和Set結構相結合,數組去重 [...new Set(array)]
數組的map和filter也可用於Set,set = new Set([...set].map(x => x*2))
2.WeakSet——成員只能是對象,不能是其他類型的值;垃圾回收機制不考慮WeakSet中的對象,因此不可遍歷,可防內存泄露。有add(),has(),delete()三個方法。
3.Map——鍵值對的數據結構 set(),get()方法; 解決同名屬性碰撞的問題
E.g: let map = new map(); map.set(1,’aaa’);map.get(1) //’aaa’
值得注意的是:只有對同一個對象的引用,Map結構纔將其視爲同一個鍵:
var map= new Map();
map.set(['a'], 555);
map.get(['a']) // undefined 表面上是針對同一個鍵,實際上內存地址不一樣。
同理,同樣的值的兩個實例,在Map結構中被視爲兩個鍵。
var k1= ['a'];var k2= ['a'];
new Map().set(k1, 111).set(k2, 222);
map.get(k1) // 111 map.get(k2) // 222
Map結構的操作方法:size屬性,set(key,value)(因爲是返回Map本身,所以可以採用鏈式方法),get(key),has(),delete(),clear().
Map結構的遍歷方法:keys(),values(),entries()默認遍歷接口,forEach()
Map結構轉爲數組結構,擴展運算符[...map]/[...map.entries],可結合數組的map方法和filter方法實現遍歷和過濾。
Map與其他數據之間的轉換:
Map => 數組: [...map]
數組 => Map:new Map(array)
Map => 對象 前提:Map的鍵都是字符串
對象 => Map
Map => Json JSON.stringify(),Map鍵名都是字符串,轉爲對象Json;Map鍵名有非字符串轉爲數組Json
Json => Map JSON.parse(),正常情況下,所有鍵名都是字符串,有一種特殊情況,整個Json是一個數組,每個數組的成員本身又是一個有兩個成員的數組
4.WeakMap 只接受對象作爲鍵名,null除外,鍵名指向的對象不計入垃圾回收機制,可防內存泄露。只有四個方法:get(),set(),has(),delete().另一個用處是部署私有屬性。