forEach和map
forEach
和 map
都是 JavaScript 数组上常用的高阶函数,用于迭代数组中的元素。尽管它们的语法和操作方式有些相似,但功能和用例却有所不同。下面是它们不同之处的详细介绍:
forEach
描述
forEach
方法用于执行数组的每个元素一次,并不返回值。- 这是一个没有返回值的遍历机制,即返回值是
undefined
。
语法
array.forEach(callback(currentValue, index, array), thisArg);
callback
:在数组每个元素上执行的函数,接收三个参数。currentValue
:当前元素的值。index
(可选):当前元素的索引。array
(可选):调用forEach
的数组。
thisArg
(可选):执行callback
时,用作this
值。
示例
const numbers = [1, 2, 3, 4, 5];
numbers.forEach((value, index) => {
console.log(`Index: ${index}, Value: ${value}`);
});
// 输出:
// Index: 0, Value: 1
// Index: 1, Value: 2
// Index: 2, Value: 3
// Index: 3, Value: 4
// Index: 4, Value: 5
map
描述
map
方法创建一个新数组,结果是原数组每个元素调用一个提供的函数后返回的结果。- 这是一个有返回值的遍历机制,返回一个新数组。
语法
array.map(callback(currentValue, index, array), thisArg);
callback
:在数组每个元素上执行的函数,接收三个参数。currentValue
:当前元素的值。index
(可选):当前元素的索引。array
(可选):调用map
的数组。
thisArg
(可选):执行callback
时,用作this
值。
示例
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(value => value * 2);
console.log(doubled); // [2, 4, 6, 8, 10]
主要区别
-
返回值:
forEach
没有返回值 (undefined
)。map
返回一个新数组。
-
用途:
forEach
主要用于执行副作用(如修改外部变量、输出日志等)。map
主要用于创建一个新数组,每个元素是原数组的某种转换结果。
-
链式调用:
- 由于
forEach
不返回数组,因此不能直接进行链式调用。 map
返回一个新数组,可以进行链式调用。
- 由于
具体使用场景
-
forEach:
- 用于遍历数组,执行副作用函数而不需要新数组。
- 示例:
const numbers = [1, 2, 3, 4, 5]; let sum = 0; numbers.forEach(value => { sum += value; }); console.log(sum); // 15
-
map:
- 用于创建新数组,通常是对原数组的每个元素进行某种转换。
- 示例:
const numbers = [1, 2, 3, 4, 5]; const squares = numbers.map(value => value * value); console.log(squares); // [1, 4, 9, 16, 25]
小结
- 使用
forEach
当你需要遍历数组并执行副作用时(比如修改外部变量、打印日志等)。 - 使用
map
当你需要创建一个新的数组,每个元素是根据原数组元素计算得到的。