JavaScript Map 映射

发布于 2022-01-22 22:52:57 字数 3408 浏览 1024 评论 0

我们可以把映射看成是对 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

lorenzathorton8

文章 0 评论 0

Zero

文章 0 评论 0

萧瑟寒风

文章 0 评论 0

mylayout

文章 0 评论 0

tkewei

文章 0 评论 0

17818769742

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文