map方法创建新数组且不修改原数组,回调函数需返回值,参数为元素、索引、原数组,适用于不可变性场景;注意避免引用类型副作用,嵌套对象需深拷贝。

map 方法会遍历原数组的每个元素,对每个元素执行回调函数,并将返回值组成一个新数组,原数组保持不变。
核心特点:不修改原数组,纯函数式操作
map 不会改变原始数组,而是创建并返回一个新数组。这是它与 forEach 或直接索引赋值(如 arr[i] = newValue)的关键区别。适合需要保留原始数据、强调不可变性的场景。
- 回调函数接收三个参数:当前元素、当前索引、原数组(通常只用第一个)
- 必须有返回值;若未显式返回,对应位置结果为
undefined - 新数组长度与原数组严格一致,不会跳过空位或过滤元素
基础用法:更新数值、字符串或对象字段
常见更新操作包括数字加减、字符串转换、对象属性重映射等。例如:
把数组中每个数字翻倍:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
const numbers = [1, 2, 3];<br>const doubled = numbers.map(x => x * 2); // [2, 4, 6]<br>console.log(numbers); // [1, 2, 3] — 原数组未变
更新对象数组中的某个字段:
const users = [{name: 'Alice', age: 25}, {name: 'Bob', age: 30}];<br>const usersWithStatus = users.map(u => ({...u, status: 'active'}));<br>// [{name:'Alice',age:25,status:'active'}, {name:'Bob',age:30,status:'active'}]
注意事项:避免副作用,谨慎处理引用类型
虽然 map 本身不修改原数组,但如果回调中直接修改对象或数组等引用类型,仍会影响原数据:
- ❌ 错误:在 map 中直接修改对象属性(破坏不可变性)
- ✅ 正确:用展开运算符或 Object.assign 创建新对象
- ⚠️ 注意:对嵌套对象或数组需深拷贝,否则浅层复制仍共享引用
替代方案对比:什么时候不用 map?
如果目标是就地更新原数组(如性能敏感、明确允许修改),应使用 for 循环 或 forEach;如果需要筛选+映射,优先考虑 filter().map() 或一步完成的 flatMap;若只需遍历无返回,用 forEach 更语义清晰。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










