务必把握Map对象在JavaScript循环中的使用细节

简介: 由于Map对象跟传统的对象类似,但提供了更多的迭代功能,它被广泛用来代替Object存储键值对。适当的使用Map和配套的迭代方法,可以让代码更加清晰,提高数据操作的灵活性和效率。在数据量大或者对迭代顺序有特定需求时,Map会是一个很好的选择。

在JavaScript中,Map对象是一种新的键值对集合数据结构,与传统的Object有着本质的差异。一个Map的键可以是任意值,包括函数、对象或任何原始值。Map对象与传统的Object相比,有以下几个显著的优点:

  • 键的范围不限于字符串和Symbol。
  • Map对象的键值对是有序的,即键值对的插入顺序是如何,迭代顺序就是如何。
  • Map 的大小可以通过 size 属性轻松获取,而不是像Object那样必须手动计算。
  • Map 是可迭代的,可以直接使用 for...of 循环进行迭代。
  • Map 进行迭代效率比Object的迭代(例如,使用 Object.keys 或者 Object.entries)要来得高。

在JavaScript中进行循环操作时,使用Map对象,你可以采用多种方式进行迭代,它们分别有着不同的用途和语法结构。

for...of 循环

for...of 循环直接迭代Map中的键值对,它返回每个项的[key, value]数组。

let myMap = new Map();
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');

for (let [key, value] of myMap) {
  console.log(key, value);
}
​

forEach() 方法

Map对象的 forEach() 方法类似于数组的 forEach() 方法,它按照插入顺序迭代每个键值对,并执行提供的回调函数。

myMap.forEach((value, key) => {
  console.log(key, value);
});
​

迭代器方法

Map对象提供了三个迭代器方法:keys()values()entries()。这些方法返回新的迭代器对象,你可以用 for...of 循环或者其他迭代器协议的方法来遍历。

  • keys() 迭代Map中的键。
  • values() 迭代Map中的值。
  • entries() 迭代Map中的项即键值对。
for (let key of myMap.keys()) {
  console.log(key);
}

for (let value of myMap.values()) {
  console.log(value);
}

for (let [key, value] of myMap.entries()) {
  console.log(key, value);
}
​

使用展开运算符

你还可以通过展开运算符 ... 去将Map对象的 keysvalues、或 entries 迭代器转换成数组。

console.log([...myMap.keys()]);   // 输出所有的键
console.log([...myMap.values()]); // 输出所有的值
console.log([...myMap.entries()]); // 输出所有的键值对
​

由于Map对象跟传统的对象类似,但提供了更多的迭代功能,它被广泛用来代替Object存储键值对。适当的使用Map和配套的迭代方法,可以让代码更加清晰,提高数据操作的灵活性和效率。在数据量大或者对迭代顺序有特定需求时,Map会是一个很好的选择。

目录
相关文章
|
前端开发 Serverless UED
iconfont渐变色实现方案总结
iconfont渐变色实现方案总结
1230 0
|
人工智能 前端开发 搜索推荐
《网页滚动的“隐形指挥官”:overscroll - behavior属性全解析》
`overscroll-behavior` 属性是现代网页设计中的关键元素,可精细控制滚动行为,优化用户体验。它包含 `auto`、`contain` 和 `none` 三个核心值,分别实现默认滚动、限制事件传播和完全禁用边界行为的功能。通过解决多层滚动干扰、移动端弹性效果等问题,该属性提升了交互流畅性与沉浸感,同时减少性能开销。在复杂页面中,合理运用此属性能让滚动操作更加智能、独立,为用户带来高效且愉悦的体验,成为打造高品质网页不可或缺的工具。
310 31
|
11月前
|
消息中间件 存储 缓存
超全面Java中的队列(Queue)
Java中的`Queue`接口位于`java.util`包,继承自`Collection`,用于存储待处理的元素,通常遵循FIFO原则。它包含`add`、`offer`、`poll`等方法,支持多种实现类,如`LinkedList`、`PriorityQueue`、`ArrayDeque`、`ConcurrentLinkedQueue`及`BlockingQueue`系列。
1087 0
ElementUI表单校验trigger设为change无效问题
ElementUI表单校验trigger设为change无效问题
948 1
|
网络协议 Java 应用服务中间件
Tomcat中的WebSocket是如何实现的?
【10月更文挑战第7天】本文介绍了WebSocket在Tomcat中的实现,包括其全双工通信、单个TCP连接、协议升级和事件驱动的特点。通过Spring Boot项目整合WebSocket,展示了如何配置依赖、创建WebSocket处理类和配置类。详细解析了WebSocket的原理,包括ServerEndpointExporter的注册过程和请求处理流程。总结了WebSocket与HTTP请求处理的区别,并提供了进一步学习的资源。
Tomcat中的WebSocket是如何实现的?
cesium自带的组件显示与隐藏
这篇文章讲解了如何控制Cesium中自带组件的显示与隐藏,包括了各个组件的属性名称及其对应的显示隐藏操作方法。
708 1
cesium自带的组件显示与隐藏
|
API
Vue3组件通信全解析:利用props、emit、provide/inject跨层级传递数据,expose与ref实现父子组件方法调用
Vue3组件通信全解析:利用props、emit、provide/inject跨层级传递数据,expose与ref实现父子组件方法调用
4741 0
|
存储 JavaScript 前端开发
js中的遍历方法比较:map、for...in、for...of、reduce和forEach的特点与适用场景
js中的遍历方法比较:map、for...in、for...of、reduce和forEach的特点与适用场景
916 0
|
监控 JavaScript
成功解决:[‘‘, ‘‘, __ob__: Observer]
这篇文章介绍了Vue框架中数组出现`__ob__: Observer`属性的原因和解决方法,说明了Vue如何通过观察者模式实现数据与视图的双向绑定,并提供了如何避免数组被Vue接管导致无法取值的解决方案。
成功解决:[‘‘, ‘‘, __ob__: Observer]
|
监控 JavaScript 前端开发
JavaScript 正则表达式详解
【2月更文挑战第26天】
562 1
JavaScript 正则表达式详解

热门文章

最新文章