信息发布→ 登录 注册 退出

如何正确遍历 ES6 Map 并转换为对象数组

发布时间:2025-12-30

点击量:

`object.keys()` 无法获取 `map` 实例的键,因为 `map` 不是普通对象,其键值对不作为自有属性存在;应使用展开运算符 `...map.entries()` 获取键值对数组后再映射。

在 JavaScript 中,Map 是一种独立的数据结构,并非基于普通对象实现,因此不能用 Object.keys()、Object.values() 或 for...in 等面向普通对象的方法来访问其内容。Object.keys(map1) 返回空数组 [] 的根本原因在于:Map 实例没有可枚举的自有字符串属性——它的键值对被内部存储,需通过专用 API 访问。

✅ 正确做法是使用 map.entries() 方法,它返回一个迭代器,可生成 [key, value] 形式的键值对数组。配合展开语法 ...,即可轻松转为数组并使用 .map():

let map1 = new Map();
map1.set('111020022AS', true);
map1.set('23t2t363114', false);
map1.set('110AI1123333', true);
map1.set('0000111222', false);

// ✅ 正确:获取所有 [key, value] 对,再映射为对象数组
const newMapAsArray = [...map1.entries()].map(([label, value]) => ({
  label,
  value
}));

console.log('new map is', newMapAsArray);
// 输出:
// [
//   { label: '111020022AS', value: true },
//   { label: '23t2t363114', value: false },
//   { label: '110AI1123333', value: true },
//   { label: '0000111222', value: false }
// ]

⚠️ 注意事项:

  • newMapAsArray 是一个普通数组(含对象),不是 Map 实例。若你确实需要一个新的 Map,应使用 new Map([...map1.entries()]) 或 new Map(map1) 直接拷贝;
  • 若目标是构建带额外处理的 Map(如过滤、格式化),推荐先用 Array.from(map1) 或 [...map1] 转为数组,再链式调用 .filter()、.map(),最后传入 new Map() 构造;
  • 避免误用 map1[key] —— Map 不支持方括号属性访问(那是 Object 的行为),必须使用 map1.get(key)。

? 小结:操作 Map 请始终优先使用其原生方法:.entries()、.keys()、.values() 和 .forEach(),它们语义清晰、性能可靠,且完全兼容迭代协议。

标签:# javascript  # es6  # java  # ai  # 键值对  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!