[資料結構] — Map
Map 是 JavaScript ES6 中新增的資料結構 ,類似於 object ,不過 Map 還是跟 object 有著以下的差異:
Map 的 key 是可以是原始型別、物件、函式,而 object 的 key 限定為 string、 symbol
Map 為 array-like (類陣列)所以可以使用 array 的方法,像是 forEach 等等
Map 中的 keys 會根據被添加的時間而有順序性,而 Object 則沒有順序性
假如需要頻繁的新增刪除屬性時,Map 的效能會比 Object 更好
如何宣告一個新的 Map
1 | let map = new Map(); |
Map.set(key, value)
新增 key-value pairs(鍵值對),如果 key 已經存在,舊的值會被新的值覆蓋
1 | //第一個值傳入 key 第二個值傳入 value |
因為 set 會回傳 map 的本身,所以可以使用 chaining(鏈)的寫法
1 | let map = new Map().set("jay", 13).set("ban", 23).set("luna", 49); |
Map.get(key)
用 key 來獲取 value,如果沒有這個 key 會回傳 undefined
1 | map.get("tom"); //get 28 |
Map.size()
獲取 Map 的長度
1 | map.size; // get 2 |
Map.has(key)
檢查 Map 是否擁有該 key,會回傳 boolean 值
1 | map.has("tom"); // true or false |
Map.delete(key)
刪除 Map 的某個 key,如果刪除成功會回傳 true,失敗則是 false
1 | map.delete("tom"); // true or false |
Map.clear()
清除 Map 所有的鍵值對,不會回傳值
1 | map.clear("tom"); |
Map Iteration (迭代)
- **Map.keys() :**回傳 map 所有的 key
- **Map.values():**回傳 map 所有的 value
- **Map.entires():**回傳 map 每個元素的[key, value]的鍵值對
1 | let map = new Map([ |
可以搭配 for of 或 forEach 來遍歷 map
1 | //for of |
將 map 轉成陣列
1 | //....擴展運算子 |
WeakMap
WeakeMap 結構類似於 Map,只接受 object 作為 key ,不接受其它類型的值,不支援迭代的方法 ex. keys()、values()、entries()等等,WeakMap 的 key 為弱引用,當作為 key 的 object 在其它地方沒有被引用的時候,就會被 js 垃圾回收機制自動回收,整個鍵值對都會消失。
1 | let weakMap = new WeakMap(); |
參考資料:MDN