JavaScript:何时应该使用 forEach 和 map?

2025-06-10

JavaScript:何时应该使用 forEach 和 map?

每当我在 JavaScript 课程中前进时,我都会注意到,当我离开常规循环并转到 forEach 时,许多学生一开始都会有点迷失,而这篇文章的想法就是在文本中永久地解释这一点,以帮助任何人。我的学生或学生,你现在可能有多大程度上有这个疑问。

介绍

如果您采用下面的 3 个代码,它们在浏览器中都会有相同的返回。

const names= ['Whinds', 'Freeway', 'Teste', 'Maria'];

for(let i = 0; i < names.length; i = i + 1 ) {
    console.log('[for]', names[i]);
}
Enter fullscreen mode Exit fullscreen mode
const names = ['Whinds', 'Freeway', 'Teste', 'Maria'];

names.forEach(function(name, i) {
    console.log('[forEach]', name, i);
})
Enter fullscreen mode Exit fullscreen mode
const names = ['Whinds', 'Freeway', 'Teste', 'Maria'];

names.map(function(name, i) {
    console.log('[forEach]', name, i);
})
Enter fullscreen mode Exit fullscreen mode

一开始,你可以假设如果结果相同,它们做的事情就一样。但是,如果我们稍微看一下 forEach 和 map 就会发现,这里我们不需要担心索引变量(我们通常称之为 i),它用于控制循环,因为它是一个通常递增或递减的元素。

然而,很容易注意到,虽然我们没有写代码,但这些数据我们仍然可以访问,只不过这次我们把它作为传递给 forEach 和 map 函数的参数。为了更清楚地说明这一点,我们来看看 forEach 的一个可能实现。

该实现在 array.map 和 array.forEach 模型中不起作用,因为为此我们需要弄乱原型,而这本身就会产生一个帖子。

理解 forEach

之前我们看到 forEach 循环遍历数组中的所有元素,就像普通的 for 循环一样,这是因为它内部有一个 for 循环。如果我们要实现它,将会是类似下面的代码:

function ourForEach(arr, function) {
    for(let i = 0; i < arr.length; i = i + 1) {
        function(arr[i], i);
    }
}

ourForEach(['name', 'name2'], function(name, index) {
    console.log(name, index)
})
Enter fullscreen mode Exit fullscreen mode

无论何时要执行 for 循环,都值得使用 forEach,因为它消除了处理控制变量的心理负担,因此可以帮助使代码更易于阅读,同时考虑到这是 JavaScript 世界中过度使用的形式。

了解地图

在实践中,正如我们在文章开头看到的那样,map 和 forEach 似乎做同样的事情,但是当我们分析它们的返回结果时,区别就很明显了。

const names = ['Whinds', 'Freeway', 'Teste', 'Maria'];

const returnForEach = names.forEach((currentName) => {
    console.log(currentName);

    return currentName.toUpperCase();
})
console.log(returnForEach) // undefined
Enter fullscreen mode Exit fullscreen mode
const names= ['Whinds', 'Freeway', 'Teste', 'Maria'];

const returnMap = names.map((currentName) => {
    console.log(currentName);

    return currentName.toUpperCase();
})
console.log(returnMap ) // ['WHINDS', 'FREEWAY', 'TESTE', 'MARIA']
Enter fullscreen mode Exit fullscreen mode

虽然 forEach 是作为 for 循环的替代品,但 map 是用来对数组的项目进行转换/修改操作的,在这些操作结束时,我们得到一个与基本列表具有相同项目数的新列表。

如果我们要实现该地图,我们最终会得到以下代码:

function ourMap(arr, function) {
    const newArray = [];
    for(let i = 0; i < arr.length; i = i + 1) {   
        newArray .push(function(arr[i], i));
    }    
    return newArray 
}

ourMap(['name', 'name2'], function(name, index) {
    console.log(name, index)
})
Enter fullscreen mode Exit fullscreen mode

这使得我们更容易地连接诸如创建地图和添加过滤器之类的操作,假设地图的返回是一个数组,我们可以在这一行上编写代码:.map().filter()。

结论

这就是这篇文章的全部内容,我希望您清楚地了解,如果我们只是想要一种更优雅的方式来使用 for,我们使用 .forEach,如果我们想要转换/更改值,甚至在数组顶部连接操作,.map 是最合适的。

鏂囩珷鏉ユ簮锛�https://dev.to/samantafluture/javascript-when-should-i-use-foreach-and-map-1aao
PREV
在 JavaScript 中将值转换为布尔值的 2 种方法
NEXT
React 项目性能优化技巧