这是 ES6 中一种新的资料结构,每组资料都有对应的 key 值与 value 值,所以 Map 在意义上类似于物件。
而 key 值的範围不限于字串,可以是各种类型的值(包括 number、array、object、function、symbol...等等)都可以当作 key,是一种更完善的 Hash 结构实现。
// Map 基本使用let map = new Map();// 可以使用 set() 方法设置资料内容map.set('first', 1);map.set(10, 'ten');map.set({sayHi: 'Hi'}, 'obj');console.log(map); // Map(3) {"first" => 1, 10 => "ten", {…} => "obj"}
内部为 [key, value]
的资料结构
使用new
产生 Map 物件在产生 Map 时也可以接收以下的参数有着迭代协议的物件结构阵列集合,类似 -- [['key1', 'value1'], ['key2', 'value2']]
搭配for..of
迭代循环可单独取得所有的[key, value]
可以使用...
扩展运算子取得阵列集合let map1 = new Map();// 放置阵列集合let map2 = new Map([ ['first', 1], [10, 'ten'], [{sayHi: 'Hi'}, 'obj']]);// 搭配 for...of 循环取得[key, value]for (let [key, value] of map2) { // ...}// 搭配扩展运算子取得阵列集合console.log([...map1]); // []console.log([...map2]);// [// ['first', 1],// [10, 'ten'],// [{sayHi: 'Hi'}, 'obj']// ]
Map 的操作方法
set(key, value)
: 设置内容get(key)
: 获取指定 key 的内容,若找不到返回undefined
has(key)
: 检查是否存在此 key,有则返回ture
,无则返回false
delete(key)
: 删除指定 key 的内容,成功返回ture
,失败返回false
clear()
: 删除所有内容成员size 属性
: 取得内容成员总数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) // 'ten'map.has('first') // 'ture'map.delete('first') map.get('first') // undefinedmap.size // 4map.clear()map.size // 0
Map 的迭代方法
这些方法函数所产生的内容都是 "迭代器(iterator)的资料类型",可以使用for...of
迴圈取得个别单独的值,也能使用...
扩展运算符直接转成阵列类型。
keys()
: 取得所有 keyvalues()
: 取得所有成员的值entries()
: 取得所有内容成员forEach()
: 走访 Map 的所有成员let map = new Map([ [1, 'one'], [2, 'two']]);for (let key of map.keys()) { console.log(key);}// 1// 2for (let value of map.values()) { console.log(value);}// 'one'// 'two'for (let [key, value] of map.entries()) { console.log(key, value);}// 1 'one'// 2 'two'// 等同于for (let [key, value] of map) { console.log(key, value);}// 也能使用...扩展运算子直接转成阵列类型console.log([...map.keys()]); // [1, 2]console.log([...map.values()]); // ['one', 'two']