Map定义
Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
键名
一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值。
如字符串、函数、对象、数组、NaN等
var newMap=new Map()
var keyString="jian ming"
myMap.set(keyString,"jian zhi")
myMap.get(keyString)//jian zhi
myMap.get("jian ming")//jian zhi
需要注意的是引用类型数据做键名的时候
var myMap = new Map();
var keyObj = {},
myMap.set(keyObj, "jian zhi");
myMap.get(keyObj); // "jian zhi"
myMap.get({}); // undefined, 因为 keyObj !== {}
方法
迭代、对Map进行遍历
1)for...of
var myMap = new Map()
myMap.set("zhang", "san")
myMap.set("li", "si")
for ([xing,ming] of myMap){
console.log([xing,ming])
}
//[zhang,san]
//[li,si]
可以在此过程中,调用一些方法进行操作
var myMap = new Map()
myMap.set("zhang", "san")
myMap.set("li", "si")
for (var [xing, ming] of myMap.entries()) {
console.log("姓:"+xing,"名:"+ming);
}
//姓:zhang 名:san
//姓:li 名:si
这个 entries 方法返回一个新的 Iterator 对象,它按插入顺序包含了 Map 对象中每个元素的 [key, value] 数组。
2)foreach
myMap.set("zhang", "san")
myMap.set("li", "si")
myMap.forEach(myfunction)
function myfunction(xing,ming){
console.log([xing,ming])
}
//[zhang,san]
//[li,si]
操作
1)转换
Array=>Map
var array1 = [[function fn(){}, {}], [[1,2], function fn(){}]]
var myMap = new Map(array1)
console.log(myMap)
//Map(2) {ƒ => {…}, Array(2) => ƒ}
Map=>Array
var array1 = [[function fn(){}, {}], [[1,2], function fn(){}]]
var myMap = new Map(array1)
var outArray = Array.from(myMap);
console.log(outArray)
2)克隆
var myMap1 = new Map([["key1", "value1"], ["key2", "value2"]])
var myMap2 = new Map(myMap1)
console.log(myMap1 === myMap2)
打印值为false,产生新的对象
3)合并
var first = new Map([[1, 'one'], [2, 'two'], [3, 'three']]);
var second = new Map([[1, 'uno'], [2, 'dos']]);
// 合并两个 Map 对象时,如果有重复的键值,则后面的会覆盖前面的,对应值即 uno,dos, three
var merged = new Map([...first, ...second]);