将 Map 的 values 迭代器转为数组,推荐用扩展运算符 [...map.values()](最简洁)或 Array.from(map.values())(兼容性更好);不可用 slice.call(),因迭代器非类数组对象。

直接用 Array.from() 或扩展运算符([...map.values()])即可将 Map 的 values 迭代器转为数组。
使用扩展运算符(最常用)
这是最简洁、可读性最好的方式:
const map = new Map([['a', 1], ['b', 2], ['c', 3]]); const valuesArray = [...map.values()]; console.log(valuesArray); // [1, 2, 3]
- 适用于所有支持 ES6+ 的环境(现代浏览器、Node.js 6+)
- 语法短,语义清晰:把迭代器“展开”成数组元素
- 不修改原 Map,返回全新数组
使用 Array.from()
兼容性更好,适合需要支持较老运行时的场景:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
const map = new Map([['x', 'hello'], ['y', 'world']]); const valuesArray = Array.from(map.values()); console.log(valuesArray); // ['hello', 'world']
- 在 IE11、Node.js 4+ 等旧环境中也能正常工作
- 还可传入映射函数,一步完成转换:
Array.from(map.values(), x => x * 2)
注意不要用 Array.prototype.slice.call()
这个方法对 Map 的 values 迭代器无效,因为迭代器不是类数组对象(没有 length 和数字索引属性):
立即学习“Java免费学习笔记(深入)”;
// ❌ 错误写法,会得到空数组或报错 Array.prototype.slice.call(map.values()); // 不推荐,行为不可靠
- 迭代器对象不可直接被
slice.call处理 - 可能返回空数组
[],或在严格模式下抛出 TypeError
values() 返回的是迭代器,不是数组
需明确区分:map.values() 本身返回一个 MapIterator 对象,它只能用于 for...of、解构或转数组,不能直接调用 map、filter 等数组方法:
const iter = map.values();
// iter.map(...); // ❌ TypeError: iter.map is not a function
console.log(iter.next()); // ✅ { value: 1, done: false }- 若要链式操作值,先转数组再调用数组方法
- 如需惰性处理大量数据,也可直接
for (const val of map.values()) { ... }

















