map对象
Map类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括 对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map结构提供了“值— 值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。Map 可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。
//Map 可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组
var map = new Map([ ['name', '张三'], ['title', 'Author'] ]);
console.log(map)
Maps 和 Objects 的区别
- 一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值
- Map 中的键值是有序的(FIFO 原则),而添加到对象中的键则不是
- Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算
- Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突
map对象的API
Map.size
返回 Map 结构的成员总数。Map.get(key)
get方法读取key对应的键值,如果找不到key,返回undefined。Map.has(key)
has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中Map.delete(key)
delete方法删除某个键,返回true。如果删除失败,返回false。Map.clear()
清除所有成员,没有返回值Map.keys()
返回键名的遍历器Map.values()
返回键值的遍历器Map.entries()
返回键值对的遍历器Map.forEach()
使用回调函数遍历每个成员
下面给出一个完整的例子,帮助理解
//Map 可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组
var map = new Map([ ['name', '张三'], ['title', 'Author'] ]);
map.Map(1,'dsadas')
console.log(map.size) //3
console.log(map.get('name')) //张三
console.log(map.has('title')) //true
console.log(map.keys()) //[Map Iterator] { 'name', 'title', 1 }
console.log(map.values()) //[Map Iterator] { '张三', 'Author', 'dsadas' }
/*
[Map Entries] {
[ 'name', '张三' ],
[ 'title', 'Author' ],
[ 1, 'dsadas' ]
}
*/
console.log(map.entries())
console.log(map,'未删除前') //Map { 'name' => '张三', 'title' => 'Author', 1 => 'dsadas' } 未删除前
/* 遍历结果为:
name 张三
title Author
1 dsadas
*/
map.forEach((values,keys)=>{
console.log(keys,values)
})
console.log(map.delete(1)) //true
console.log(map,"删除后") //Map { 'name' => '张三', 'title' => 'Author' } 删除后
console.log(map.clear())
console.log(map,"清除所有后")
Map 对象的操作
Map 与 Array的转换
//Map 与 Array的转换
let arr=[['key1','values1'],['key2','values2']]
let map =new Map(arr);
console.log(map) //Map { 'key1' => 'value1', 'key2' => 'value2' }
let transition=Array.from(map)
console.log(transition) //[ [ 'key1', 'values1' ], [ 'key2', 'values2' ] ]
Map 的克隆
//map的克隆
var myMap1 = new Map([["key1", "value1"], ["key2", "value2"]]);
var myMap2 = new Map(myMap1);
console.log(myMap1===myMap2); //false
// 打印 false。 Map 对象构造函数生成实例,迭代出新的对象。
Map的合并
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]);
console.log(merged) //Map { 1 => 'uno', 2 => 'dos', 3 => 'three' }