map方法遍历原数组,对每个元素调用回调函数生成新数组,不修改原数组;新数组长度与原数组严格一致,即使回调返回undefined也会占位。
map 方法通过遍历原数组,对每个元素调用回调函数,返回新数组,不修改原数组。
map 的基本用法和核心规则
map 接收一个回调函数作为参数,该函数会依次执行:传入当前元素、当前索引、整个原数组。每次执行后,将返回值收集进一个新数组,最终返回这个新数组。
- 原数组保持不变,map 总是返回一个全新数组
- 新数组长度与原数组严格一致(哪怕回调返回 undefined,也会占位)
- 如果回调中没有 return,或 return undefined,对应位置就是 undefined
手动实现一个简易 map 方法
可以用 for 循环模拟 map 行为,关键点是创建空数组、逐个 push 回调结果、最后返回新数组:
function myMap(arr, callback) {
const result = [];
for (let i = 0; i <p>这样调用 <code>myMap([1,2,3], x => x * 2)</code> 就会得到 <code>[2,4,6]</code>。</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/2530" title="Java JDK 25"><img
src="https://img.php.cn/upload/manual/001/221/864/6a6091217fc2f681.png" alt="Java JDK 25" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/gongju/2530" title="Java JDK 25" class="overflowclass">Java JDK 25</a>
<p class="overflowclass">Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。</p>
</div>
<a rel="nofollow" href="/xiazai/gongju/2530" title="Java JDK 25" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div><h3>常见转换场景举例</h3><p>map 最常用于结构转换,比如提取对象字段、格式化数值、生成新对象等:</p>
- 提取属性:
users.map(u => u.name)→ 得到名字数组 - 计算变换:
numbers.map(n => n.toFixed(2))→ 全转为两位小数字符串 - 构造新对象:
data.map(item => ({ id: item.id, label: item.title }))
注意避开典型误区
容易误以为 map 能直接修改原数组,或者混淆它和 forEach、filter 的用途:
- 不要在 map 回调里写
arr[i] = ...—— 这不是 map 的设计目的 - 需要筛选时用 filter,需要副作用(如发请求)用 forEach,需要一一映射才用 map
- 空数组调用 map 返回空数组,稀疏数组的空位也会被遍历(但现代引擎通常跳过)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










