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

map 方法会遍历原数组的每个元素,对每个元素执行回调函数,并将返回值组成一个新数组,原数组保持不变。
核心特点:不修改原数组,纯函数式操作
map 不会改变原始数组,而是创建并返回一个新数组。这是它与 forEach 或直接索引赋值(如 arr[i] = newValue)的关键区别。适合需要保留原始数据、强调不可变性的场景。
- 回调函数接收三个参数:当前元素、当前索引、原数组(通常只用第一个)
- 必须有返回值;若未显式返回,对应位置结果为
undefined - 新数组长度与原数组严格一致,不会跳过空位或过滤元素
基础用法:更新数值、字符串或对象字段
常见更新操作包括数字加减、字符串转换、对象属性重映射等。例如:
把数组中每个数字翻倍:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
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 更语义清晰。

















