array.map() 是纯函数式操作,不修改原数组,返回等长新数组,支持三参数回调,适用于一对一映射,不适合过滤、中断、累积或原地修改。

Array.map() 是 JavaScript 中最常用、最安全的数组转换方法之一。它不会修改原始数组,而是遍历每个元素,对每个元素执行你提供的函数,并将返回值**按顺序组成一个新数组**。
核心行为:不改变原数组,只生成新数组
这是 map() 最关键的特性:纯函数式操作。无论你在回调函数里做什么(只要不显式修改原数组),原始数组始终保持不变。
- 原始数组长度为 5,map() 返回的新数组也一定是长度为 5 的数组
- 即使回调函数返回
undefined或null,这些值也会如实进入新数组 - 如果想跳过某些元素,map() 不适合——应改用
filter()+map()组合,或直接用flatMap()
基础用法:单参数回调处理每个元素
最常见场景:对每个元素做简单计算或提取属性。
const numbers = [1, 2, 3, 4];
const doubled = numbers.map(n => n * 2); // [2, 4, 6, 8]
console.log(numbers); // [1, 2, 3, 4] ← 原数组未变
<p>const users = [{name: 'Alice', age: 25}, {name: 'Bob', age: 30}];
const names = users.map(user => user.name); // ['Alice', 'Bob']
</p>
进阶技巧:利用 map 的三个参数增强灵活性
map 的回调函数实际接收三个参数:currentValue、index、array。常用于需要位置信息或上下文的转换:
- 加序号或索引标识:如生成带编号的列表项
- 条件性转换:例如偶数位乘 2,奇数位减 1
- 访问原数组其他元素(谨慎使用,避免副作用)
const items = ['a', 'b', 'c'];
const withIndex = items.map((item, i) => `${i + 1}. ${item}`);
// ['1. a', '2. b', '3. c']
<p>const nums = [10, 20, 30, 40];
const mixed = nums.map((n, i) => i % 2 === 0 ? n * 2 : n - 1);
// [20, 19, 60, 39]
</p>
注意事项:避免常见误用
map 不是万能循环工具,它的设计目标明确——“一对一映射”。以下情况不适合单独用 map:
- 需要中断遍历(map 没有 break / return false 机制;考虑
some()或find()) - 要累积计算(如求和、拼接字符串;用
reduce()更语义清晰) - 想修改原数组本身(虽然技术上可行,但违背 map 设计原则;直接用 for 循环或
forEach()) - 返回的是数组或对象但希望展平结构(此时
flatMap()是更优选择)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











