這是 ES6 中一種新的資料結構,每組資料都有對應的 key 值與 value 值,所以 Map 在意義上類似於物件。
而 key 值的範圍不限於字串,可以是各種類型的值(包括 number、array、object、function、symbol…等等)都可以當作 key,是一種更完善的 Hash 結構實現。
1 2 3 4 5 6 7 8 9 10
| let map = new Map();
map.set('first', 1); map.set(10, 'ten'); map.set({sayHi: 'Hi'}, 'obj');
console.log(map);
|
內部為 [key, value]
的資料結構
- 使用
new
產生 Map 物件
- 在產生 Map 時也可以接收以下的參數
- 有著迭代協議的物件結構
- 陣列集合,類似 –
[['key1', 'value1'], ['key2', 'value2']]
- 搭配
for..of
迭代循環可單獨取得所有的[key, value]
- 可以使用
...
擴展運算子取得陣列集合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| let map1 = new Map();
let map2 = new Map([ ['first', 1], [10, 'ten'], [{sayHi: 'Hi'}, 'obj'] ]);
for (let [key, value] of map2) { }
console.log([...map1]);
console.log([...map2]);
|
Map 的操作方法
set(key, value)
: 設置內容
get(key)
: 獲取指定 key 的內容,若找不到返回undefined
has(key)
: 檢查是否存在此 key,有則返回ture
,無則返回false
delete(key)
: 刪除指定 key 的內容,成功返回ture
,失敗返回false
clear()
: 刪除所有內容成員
size 屬性
: 取得內容成員總數
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| let map = new Map();
map.set('first', 1); map.set(10, 'ten'); map.set({sayHi: 'Hi'}, 'obj'); map.set(() => 'key', 123); map.set(Symbol('items'), [1, 2]);
map.get(10) map.has('first')
map.delete('first') map.get('first')
map.size map.clear() map.size
|
Map 的迭代方法
這些方法函數所產生的內容都是 “迭代器(iterator)的資料類型“,可以使用for...of
迴圈取得個別單獨的值,也能使用...
擴展運算符直接轉成陣列類型。
keys()
: 取得所有 key
values()
: 取得所有成員的值
entries()
: 取得所有內容成員
forEach()
: 走訪 Map 的所有成員
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| let map = new Map([ [1, 'one'], [2, 'two'] ]);
for (let key of map.keys()) { console.log(key); }
for (let value of map.values()) { console.log(value); }
for (let [key, value] of map.entries()) { console.log(key, value); }
for (let [key, value] of map) { console.log(key, value); }
console.log([...map.keys()]); console.log([...map.values()]);
|