JavaScript中使用Map存储数据时遍历能否保证插入顺序?
Map遍历顺序的规范说明
for...of遍历Map实例的entries顺序有明确的ECMAScript规范强制保障,你给出的场景中,第一个遍历得到的age值始终为33,不存在随机乱序的可能。
- Map的遍历顺序严格和键值对的插入顺序绑定:所有遍历相关的操作(包括
for...of循环、entries()/keys()/values()返回的迭代器、forEach方法、扩展运算符...展开)都必须按照键值对被set()插入Map的先后顺序输出内容,这是ES6标准中对Map实现的强制要求,所有符合标准的JS运行环境(现代浏览器、Node.js等)都遵循该规则。 - 你的代码逻辑中,键值对插入顺序和API返回的原数组顺序完全一致:先插入
'jordan' => 33,后插入'rich' => 23,因此遍历输出时永远先拿到jordan对应的age值33。
你给出的示例代码存在一处笔误:for循环中没有从原数组取出当前遍历项,直接使用了未定义的
person变量,实际运行会报错,修正后的代码如下:
let people = [{ name: "jordan", age: 33}, { name: "rich", age: 23} ]; // 接口返回数据 let map = new Map(); for (let x = 0; x < people.length; x++) { const person = people[x]; // 补全取当前遍历项的逻辑 map.set(person.name, person.age) }
注意不要把Map和普通Object的遍历规则搞混:早期普通JS对象的键遍历顺序没有统一规范,不同引擎实现存在差异,但Map从设计之初就把「保留插入顺序」作为核心特性写入标准,完全可以满足你保留接口返回数组原有顺序的需求。
内容的提问来源于stack exchange,提问作者sal3jfc
相关产品推荐
相关产品推荐

