JavaScript Map 映射
我们可以把映射看成是对 JavaScript Object 的一个扩展。在传统的 JavaScript Object 中,当我们设置 key, value 对的时候,key 只能是字符串。ES6 对这个进行了扩展,形成了新的映射类型,映射类型的 key, value 对可以是任意对象。
映射的初始化
在 ES6 中,可以通过如下2种对构造函数的调用来创建并初始化一个映射对象
不传参数给构造函数,这将创建一个空的映射
var sampleMap = new Map();
console.log(sampleMap.size); //will output 0
传一个数组给构造函数,这个传入的数组的每个元素包含 2 个值,第一个将作为 key,另外一个作为 value
var sampleMap = new Map([['key1', 'val1'], ['key2', 'val2']]);
//will output 2, also sampleMap will have key key1 and key2
console.log(sampleMap.size);//will output 2
对映射对象的操作
和集合对象类似,你可以对映射对象执行如下的操作
- 增加成员,通过
set(key, val)
向映射对象增加成员 - 删除成员,通过
delete(key)
从映射对象删除成员 - 测试是否包含,通过
has(key)
测试是否包含某个key - 获取成员,通过
get(key)
返回成员 - 清空成员,通过
clear()
操作清空整个映射对象
另外,映射对象和集合对象一样,当你使用 object 作为 key 的时候,是根据 key 是否指向同样的内存对象来判断是否 new 一个 key 的。如果 2 个 key 的对象指向的是同一个内存对象,那么后面一个 set 将覆盖前面一个 set 的内容。
对映射对象的遍历
对映射对象,你可以使用下面的任意一种方法进行合适的遍历。
keys() 调用,keys() 调用将返回映射对象 key 的集合,接着你就可以使用 for...of 循环遍历了。
'use strict';
var sampleMap = new Map();
sampleMap.set('key1', 'val1');
sampleMap.set('key2', 'val2');
for (let key of sampleMap.keys()){
console.log(key + '---' + sampleMap.get(key));
}
values() 调用,values() 调用返回映射对象 value 的集合,接着你就可以使用 for...of 循环遍历了。
'use strict';
var sampleMap = new Map();
sampleMap.set('key1', 'val1');
sampleMap.set('key2', 'val2');
for (let val of sampleMap.values()){
console.log(val);
}
entries() 调用,entries() 调用返回映射对象 key 和 value 的集合,接着你就可以使用 for...of 循环遍历了。
'use strict';
var sampleMap = new Map();
sampleMap.set('key1', 'val1');
sampleMap.set('key2', 'val2');
for (let item of sampleMap.entries()){
console.log(item[0] + '---' + item[1]);
}
forEach()
调用
'use strict';
var sampleMap = new Map();
sampleMap.set('key1', 'val1');
sampleMap.set('key2', 'val2');
sampleMap.forEach(function(value, key, map){
console.log(key + '---' + value);
});
弱映射
和弱集合一样,弱映射的 key 不被垃圾回收所检查,当 key 对应的对象被回收的时候,也自动从弱映射中被删除。由于这个原因,弱映射和弱集合一样无法进行遍历,这能修改。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: JavaScript Set 集合
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论