map() 方法通过将提供的函数 (callbackFn) 应用于原始数组的每个元素来创建一个 新数组。它非常适合在不修改原始数组的情况下转换数据。
语法
array.map(callbackFn, thisArg)
-
callbackFn:在每个数组元素上运行的函数,具有以下参数:
- element: 当前元素。
- 索引:当前索引。
- array: 正在遍历的数组。
- thisArg(可选):在回调函数中用作 this 的值。
主要特点
- 返回一个新数组:原始数组保持不变。
- 跳过空槽:稀疏数组中未分配的元素不会调用回调。
- 通用用法:适用于类似数组的对象(例如 NodeLists)。
示例
1. 基本示例:转换数字
const numbers = [1, 4, 9]; const roots = numbers.map((num) => Math.sqrt(num)); console.log(roots); // [1, 2, 3]
2. 重新格式化对象
const kvArray = [ { key: 1, value: 10 }, { key: 2, value: 20 }, ]; const reformatted = kvArray.map(({ key, value }) => ({ [key]: value })); console.log(reformatted); // [{ 1: 10 }, { 2: 20 }]
3.将parseInt与map一起使用
// Common mistake: console.log(["1", "2", "3"].map(parseInt)); // [1, NaN, NaN] // Correct approach: console.log(["1", "2", "3"].map((str) => parseInt(str, 10))); // [1, 2, 3] // Alternative: console.log(["1", "2", "3"].map(Number)); // [1, 2, 3]
4. 避免未定义的结果
从回调中不返回任何内容会导致新数组中未定义:
const numbers = [1, 2, 3, 4]; const result = numbers.map((num, index) => (index <p>使用filter()或flatMap()删除不需要的元素。</p> <h4> 5. 副作用(反模式) </h4> <p>避免使用 map() 进行有副作用的操作,例如更新变量:<br> </p> <pre class="brush:php;toolbar:false">const cart = [5, 15, 25]; let total = 0; // Avoid this: const withTax = cart.map((cost) => { total += cost; return cost * 1.2; }); // Instead, use separate methods: const total = cart.reduce((sum, cost) => sum + cost, 0); const withTax = cart.map((cost) => cost * 1.2);
6. 访问其他数组元素
第三个参数(数组)允许在转换期间访问邻居:
const numbers = [3, -1, 1, 4]; const averaged = numbers.map((num, idx, arr) => { const prev = arr[idx - 1] || 0; const next = arr[idx + 1] || 0; return (prev + num + next) / 3; }); console.log(averaged);
常见用例
- 转换数据:对每个元素应用函数。
- 重新格式化对象:更改数据结构。
- Map NodeLists:将 NodeList 等 DOM 元素转换为数组:
const elems = document.querySelectorAll("option:checked"); const values = Array.from(elems).map(({ value }) => value);
何时避免使用map()
- 不需要返回值:使用 forEach() 或 for...of 代替。
- 改变数据:创建新对象而不是改变原始对象:
const products = [{ name: "phone" }]; const updated = products.map((p) => ({ ...p, price: 100 }));
最后的提示
- 仅限纯函数:确保回调没有副作用。
- 理解参数:知道map()将元素、索引和数组传递给回调。
- 避免稀疏数组:空槽将保持为空。
在高效转换数组时使用 map() 来简化代码!
以上是了解 JavaScript 数组的 map() 方法:简单指南的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript字符串替换方法详解及常见问题解答 本文将探讨两种在JavaScript中替换字符串字符的方法:在JavaScript代码内部替换和在网页HTML内部替换。 在JavaScript代码内部替换字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 该方法仅替换第一个匹配项。要替换所有匹配项,需使用正则表达式并添加全局标志g: str = str.replace(/fi

因此,在这里,您准备好了解所有称为Ajax的东西。但是,到底是什么? AJAX一词是指用于创建动态,交互式Web内容的一系列宽松的技术。 Ajax一词,最初由Jesse J创造

10款趣味横生的jQuery游戏插件,让您的网站更具吸引力,提升用户粘性!虽然Flash仍然是开发休闲网页游戏的最佳软件,但jQuery也能创造出令人惊喜的效果,虽然无法与纯动作Flash游戏媲美,但在某些情况下,您也能在浏览器中获得意想不到的乐趣。 jQuery井字棋游戏 游戏编程的“Hello world”,现在有了jQuery版本。 源码 jQuery疯狂填词游戏 这是一个填空游戏,由于不知道单词的上下文,可能会产生一些古怪的结果。 源码 jQuery扫雷游戏

本教程演示了如何使用jQuery创建迷人的视差背景效果。 我们将构建一个带有分层图像的标题横幅,从而创造出令人惊叹的视觉深度。 更新的插件可与JQuery 1.6.4及更高版本一起使用。 下载

Matter.js是一个用JavaScript编写的2D刚体物理引擎。此库可以帮助您轻松地在浏览器中模拟2D物理。它提供了许多功能,例如创建刚体并为其分配质量、面积或密度等物理属性的能力。您还可以模拟不同类型的碰撞和力,例如重力摩擦力。 Matter.js支持所有主流浏览器。此外,它也适用于移动设备,因为它可以检测触摸并具有响应能力。所有这些功能都使其值得您投入时间学习如何使用该引擎,因为这样您就可以轻松创建基于物理的2D游戏或模拟。在本教程中,我将介绍此库的基础知识,包括其安装和用法,并提供一

本文演示了如何使用jQuery和ajax自动每5秒自动刷新DIV的内容。 该示例从RSS提要中获取并显示了最新的博客文章以及最后的刷新时间戳。 加载图像是选择

本文讨论了在浏览器中优化JavaScript性能的策略,重点是减少执行时间并最大程度地减少对页面负载速度的影响。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3汉化版
中文版,非常好用

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Linux新版
SublimeText3 Linux最新版