在ES6以前,js实现键值式存储可以通过Object来方便高效地完成 作为 ECMAScript 6 的新增特性,Map 是一种新的集合类型,为这门语言带来了真正的键/值存储机制。Map 的大多数特性都可以通过 Object 类型实现,但二者之间还是存在一些细微的差异。具体实践中使用哪一个,还是值得细细甄别
1. 基本API
使用 new关键字和Map构造函数创建一个空的映射
const m = new Map();
如果要在创建的同时对映射进行初始化操作,可以给Map构造函数传入一个可迭代对象(例如对象 通过for in进行迭代,数组 通过for of进行迭代 )需要包含键值对数组。
可迭代对象中的每个键值对都会按照迭代顺序插入到新映射(map)当中
// 使用嵌套数组初始化映射
const m1 = new Map([
["key1", "val1"],
["key2", "val2"],
["key3", "val3"]
]);
alert(m1.size); // 3
初始化后,可以使用set()
方法再添加键值对,另外还能使用get()和has()进行查询,可以通过size属性获取映射(map)中的键值对数量,还可以使用delete()和clear()删除值。
const m =new Map() //创建映射
get()和has()查询
alert(m.has("firstName")); // false
alert(m.get("firstName")); // undefined
alert(m.size); // 0
set()进行添加
m.set("firstName", "Matt")
.set("lastName", "Frisbie");
alert(m.has("firstName")); // true 查询到返回true
alert(m.get("firstName")); // Matt 返回查询到的属性值
alert(m.size); // 2 当前映射(map)内部有2个键值对
set()方法返回映射实例,因此可以把多个操作连缀起来,包括初始化声明:
const m = new Map().set("key1", "val1");
m.set("key2", "val2")
.set("key3", "val3");
alert(m.size); // 3
delete()进行删除
m.delete("firstName"); // 只删除这一个键/值对
alert(m.has("firstName")); // false 查询不存在 返回false
alert(m.has("lastName")); // true
alert(m.size); // 1 当前映射内还剩1个键值对
clear()删除所有键值对
m.clear(); // 清除这个映射实例中的所有键/值对
alert(m.has("firstName")); // false
alert(m.has("lastName")); // false
alert(m.size); // 0
与 Object 不同,Map 可以使用任何 JavaScript 数据类型作为键.基本上相当于使用严格对象相等的标准来检查键的匹配性。与 Object 类似,映射的值是没有限制的。
new Map([['name', 'bear'],[['grade','class'], [1,3]]])
方法名 | 作用 | 备注 |
---|---|---|
set() | 增加键值对 | |
get() | 获取某个键对应的值 | |
has() | 判断某个键是否存在 | |
delete() | 删除某个键值对 | |
clear() | 清空 | |
size | 属性,获取键值对个数 | |
keys() | 获取所有的键 | 静态方法 |
values() | 获取所有的值 | 静态方法 |
entries() | 获取所有的键以及值 | 静态方法 |
forEach() | 遍历所有键值对 |