map 方法是 JavaScript 中数组的一种高阶函数,用于创建一个新数组,其元素是对原数组中的每个元素调用一个提供的函数后的返回值。map 不会修改原数组,它会返回一个新数组。
语法
array.map(function(currentValue, index, array), thisArg)
参数
function(currentValue, index, array): 一个函数,用来处理数组中的每个元素,包含以下参数:currentValue: 当前处理的元素。index(可选): 当前处理元素的索引。array(可选): 调用map方法的数组。
thisArg(可选): 执行回调函数时使用的this值。
返回值
- 一个新的数组,每个元素是回调函数的返回值。返回值
示例
示例 1: 基本用法
const numbers = [1, 4, 9, 16];
const doubled = numbers.map(function(num) { return num * 2; });
console.log(doubled); // [2, 8, 18, 32]
示例 2: 使用箭头函数
const numbers = [1, 4, 9, 16];
const doubled = numbers.map(num => num * 2);
console.log(doubled); // [2, 8, 18, 32]
示例 3: 处理对象数组
假设有一个包含多个用户对象的数组,想要提取出每个用户的姓名:
const users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Charlie' }
];
const names = users.map(user => user.name);
console.log(names); // ['Alice', 'Bob', 'Charlie']
示例 4: 访问索引和原数组
const numbers = [1, 2, 3, 4];
const results = numbers.map((num, index, array) => {
return `Number: ${num}, Index: ${index}, Array: ${array}`;
});
console.log(results);
/* [
"Number: 1, Index: 0, Array: 1,2,3,4",
"Number: 2, Index: 1, Array: 1,2,3,4",
"Number: 3, Index: 2, Array: 1,2,3,4",
"Number: 4, Index: 3, Array: 1,2,3,4"
]*/
示例5:计算学生的平均成绩
假设我们有一个学生数组,每个学生对象包含他们的姓名和各科成绩。我们想要生成一个新的数组,包含每个学生的姓名和他们的平均成绩。
原始数据
const students = [
{ name: 'Alice', grades: { math: 85, science: 92, english: 88 } },
{ name: 'Bob', grades: { math: 78, science: 81, english: 74 } },
{ name: 'Charlie', grades: { math: 92, science: 90, english: 95 } }
];
使用 map 方法计算平均成绩
使用 map 方法遍历学生数组,计算每个学生的平均成绩,并返回一个新的对象数组,其中包含学生的姓名和平均成绩。
cost studentsWithAverageGrades = students.map(student => {
const grades = student.grades;
const totalGrades = Object.values(grades).reduce((sum, grade) => sum + grade, 0);
const averageGrade = totalGrades / Object.values(grades).length;
return {
name: student.name, averageGrade: averageGrade.toFixed(2) // 保留两位小数
};
});
console.log(studentsWithAverageGrades);
/* [
{ name: 'Alice', averageGrade: '88.33' },
{ name: 'Bob', averageGrade: '77.67' },
{ name: 'Charlie', averageGrade: '92.33' } ] */
解释
(1)students.map(student => {...}): 遍历 students 数组,对每个 student 对象执行回调函数。
(2)const grades = student.grades: 获取学生的成绩对象。
(3)Object.values(grades): 获取成绩对象的所有值(成绩),返回一个数组。
(4)reduce((sum, grade) => sum + grade, 0): 使用 reduce 方法计算所有成绩的总和。sum 是累加器,grade 是当前处理的成绩。
(5)totalGrades / Object.values(grades).length: 计算平均成绩,即总成绩除以科目数。
(6)averageGrade.toFixed(2): 将平均成绩保留两位小数。
(7)返回新的对象: 包含学生的姓名和计算得到的平均成绩。
(8)新的数组: map 方法返回一个包含所有新对象的数组,每个对象包含学生的姓名和平均成绩。
总结
通过这个示例,可以看到 map 方法如何用于遍历一个数组并生成一个新的数组。每次迭代中,都对数组中的每个元素进行处理,并返回一个新的元素,最终得到一个包含处理结果的新数组。

被折叠的 条评论
为什么被折叠?



