介绍
这个对象是在 leetcode 刷题时遇到的,用作哈希表。
MDN 的描述是
Map
对象保存键值对,任何值都可以作为一个键或一个值
Object
和Maps
都允许存取键值,过去我们一直把对象当成Maps
使用。不过
Map
的键更自由,可以是任意值,包括对象- 可以通过
size
属性直接获取一个Map
键值对的个数,而Object
的只能手算Map
在频繁增删键值的场景性能更优Map
可直接遍历,而Object
不能直接遍历(需要先获取键数组)
使用
新建 Map 对象
var myMap = new Map()
基本用法:存储与读取
var keyObj = {} var keyString = "a string" // 存储 myMap.set(keyObj, "keyObj 的值") myMap.set(keyString, "keyString的值") // 读取 myMap.get(keyObj) myMap.get(keyString)
使用
for ... of
方法遍历for(var [key, value] of myMap) { console.log(key, value) } for(var key of myMap.keys()) { console.log(key) } for(var value of myMap.values()) { console.log(value) }
使用
forEach
方法遍历myMap.forEach((value, key) => { console.log(key, value) })
用
has
方法判断是否有某个键myMap.has(keyString)
Map 可以用数组创建,也可以还原成数组
// 一个如下形式的二维数组,总与一个 map 一一对应 var kvArray = [["key1", "value1"], ["key2", "value2"]] // 数组转 map var myMap = new Map(kvArray) // map 转数组 console.log([...myMap]) console.log(Array.from(myMap))
Map 可以复制(深拷贝)
var map = new Map([['demoKey': 'demoValue']]) var clone = new Map(map)
Map 可以合并
var map1 = new Map([[1, 'one'], [2, 'two']]) var map2 = new Map([[1, '一']]) var merged = new Map([...map1, ...map2]) console.log(merged.get(1)) // '一' console.log(merged.get(2)) // 'two'
暂无评论