ZetCode

JavaScript forEach 方法

最后修改于 2025 年 4 月 4 日

在本文中,我们将展示如何使用 JavaScript 中的 forEach 方法遍历数组。

数组迭代

forEach 方法为数组中的每个元素执行一次提供的函数。 当处理数组时,它比传统的 for 循环更简洁。 该方法不返回值,并且无法链接。

mapfilter 不同,forEach 用于其副作用,而不是转换数据。 它提供了一种简单的方法来对每个元素执行操作,而无需创建新数组。

传递给 forEach 的回调函数接收三个参数:当前元素、其索引和正在遍历的数组。 仅需要元素值;其他参数是可选的。

基本 forEach 示例

以下示例演示了 forEach 方法的基本用法。

main.js
const fruits = ['apple', 'banana', 'cherry'];

fruits.forEach(function(fruit) {
    console.log(fruit);
});

我们创建一个水果数组,并使用 forEach 记录每一个水果。 回调函数依次接收每个元素。 这是 forEach 用法的最简单形式。

$ node main.js
apple
banana
cherry

使用索引参数

forEach 回调可以访问当前元素的索引。

main.js
const colors = ['red', 'green', 'blue'];

colors.forEach(function(color, index) {
    console.log(`Color at position ${index} is ${color}`);
});

我们记录了颜色及其在数组中的索引。 回调函数的第二个参数提供当前索引。 当您需要知道元素的位置时,这很有用。

$ node main.js
Color at position 0 is red
Color at position 1 is green
Color at position 2 is blue

修改数组元素

forEach 可用于就地修改数组元素。

main.js
const numbers = [1, 2, 3, 4];
numbers.forEach(function(num, index, arr) {
    arr[index] = num * 2;
});

console.log(numbers);

我们通过数组引用访问数组中的每个数字,使其翻倍。 第三个参数提供了对原始数组的访问权限。 请注意,我们直接修改了原始数组。

$ node main.js
[ 2, 4, 6, 8 ]

使用箭头函数

箭头函数为 forEach 回调提供简洁的语法。

main.js
const languages = ['JavaScript', 'Python', 'Ruby'];

languages.forEach(lang => {
    console.log(`${lang} has ${lang.length} letters`);
});

我们使用箭头函数来记录每种语言及其字符数。 箭头函数对于简单操作来说特别简洁。 它们从周围的上下文中继承 this

$ node main.js
JavaScript has 10 letters
Python has 6 letters
Ruby has 4 letters

中断 forEach 迭代

for 循环不同,forEach 无法使用 break 中断。

main.js
const data = [1, 2, 3, 4, 5];
let sum = 0;

data.forEach(num => {
    if (sum >= 6) return; // Can't break, but can skip
    sum += num;
});

console.log(sum);

我们演示了 forEach 迭代不能提前停止。 虽然 return 退出当前回调,但它不会停止整个循环。 对于提前终止,请考虑使用 for...ofsome

$ node main.js
6

来源

数组 forEach - 语言参考

在本文中,我们演示了如何使用 forEach() 方法在 JavaScript 中遍历数组。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。 我从 2007 年开始撰写编程文章。 迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。 我拥有十多年的编程教学经验。

列出 所有 JS 数组函数。