JavaScript map 方法
最后修改于 2025 年 4 月 4 日
在本文中,我们将展示如何使用 JavaScript 中的 map 方法转换数组。
数组转换
map 方法创建一个新数组,其中填充了对调用数组中每个元素调用提供的函数的结果。它不会修改原始数组,因此在正确使用时它是一个纯函数。
当您需要根据特定逻辑转换数组中的每个元素时,通常会使用此方法。map 方法为每个元素执行回调函数一次,并根据结果构造一个新数组。
回调函数可以接受三个参数:正在处理的当前元素、它的索引以及调用 map 的数组。map 方法是可链的,并且经常与其他数组方法一起使用。
基本 map 示例
以下示例演示了 map 方法的基本用法。
main.js
const numbers = [1, 2, 3, 4]; const doubled = numbers.map(num => num * 2); console.log(numbers); // Original array unchanged console.log(doubled); // New transformed array
我们创建一个数组,并使用 map 将每个数字翻倍。原始数组保持不变。 map() 方法返回一个包含转换后的值的新数组。
$ node main.js [ 1, 2, 3, 4 ] [ 2, 4, 6, 8 ]
将对象映射到新结构
map 方法通常用于转换对象数组。
main.js
const users = [
{ id: 1, name: 'John', age: 25 },
{ id: 2, name: 'Jane', age: 30 }
];
const names = users.map(user => user.name);
const ages = users.map(user => ({ age: user.age }));
console.log(names);
console.log(ages);
我们将一个用户对象数组转换为姓名和年龄对象的数组。回调函数从每个对象中提取特定属性。请注意箭头函数中对象字面量周围的括号。
$ node main.js
[ 'John', 'Jane' ]
[ { age: 25 }, { age: 30 } ]
使用 map 与索引参数
回调函数可以访问当前元素的索引。
main.js
const fruits = ['apple', 'banana', 'cherry'];
const indexedFruits = fruits.map((fruit, index) =>
`${index + 1}. ${fruit.toUpperCase()}`
);
console.log(indexedFruits);
我们通过添加它们的位置编号来转换水果数组。索引参数(第二个参数)提供当前元素的位置。我们使用模板字面量进行字符串插值。
$ node main.js [ '1. APPLE', '2. BANANA', '3. CHERRY' ]
使用外部函数进行映射
回调函数可以在外部定义并传递给 map。
main.js
function squareRoot(num) {
return Math.sqrt(num).toFixed(2);
}
const numbers = [4, 9, 16, 25];
const roots = numbers.map(squareRoot);
console.log(roots);
我们定义一个单独的 squareRoot 函数来计算平方根。map 方法将此函数应用于每个元素。toFixed 方法将结果格式化为小数点后两位。
$ node main.js [ '2.00', '3.00', '4.00', '5.00' ]
将 map 与其他数组方法链接
map 方法可以与其他数组方法链接。
main.js
const numbers = [1, 2, 3, 4, 5, 6]; const result = numbers .filter(n => n % 2 === 0) .map(n => n * 10) .reverse(); console.log(result);
我们首先过滤偶数,然后将它们乘以 10,最后反转数组。每个方法都返回一个新数组,允许方法链。这种方法在函数式编程中很常见。
$ node main.js [ 60, 40, 20 ]
来源
在本文中,我们演示了如何使用 map() 方法在 JavaScript 中转换数组。
作者
列出 所有 JS 数组函数。