
`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(),它们语义清晰、性能可靠,且完全兼容迭代协议。










