JavaScript:.forEach() 和 .map() 之间的区别

2022-08-30 01:14:31

我知道有很多这样的话题。而且我知道基础知识:在原始阵列和新阵列上运行。.forEach().map()

在我的情况下:

function practice (i){
    return i+1;
};

var a = [ -1, 0, 1, 2, 3, 4, 5 ];
var b = [ 0 ];
var c = [ 0 ];
console.log(a);
b = a.forEach(practice);
console.log("=====");
console.log(a);
console.log(b);
c = a.map(practice);
console.log("=====");
console.log(a);
console.log(c);

这是输出:

[ -1, 0, 1, 2, 3, 4, 5 ]
=====
[ -1, 0, 1, 2, 3, 4, 5 ]
undefined
=====
[ -1, 0, 1, 2, 3, 4, 5 ]
[ 0, 1, 2, 3, 4, 5, 6 ]

我不明白为什么使用将值更改为。
我很抱歉,如果这是一个愚蠢的问题,但我对这门语言很陌生,到目前为止我发现的答案并没有让我满意。practicebundefined


答案 1

它们不是同一个。让我解释一下其中的区别。

forEach:这将循环访问列表,并对每个列表成员应用一些具有副作用的操作(例如:将每个列表项保存到数据库),并且不返回任何内容。

map:这将循环访问列表,转换该列表的每个成员,并返回另一个大小与转换后的成员相同大小的列表(例如:将字符串列表转换为大写)。它不会改变调用它的数组(尽管回调函数可能会这样做)。

引用

Array.prototype.forEach() - JavaScript |MDN

Array.prototype.map() - JavaScript |MDN


答案 2
  • Array.forEach“对每个数组元素执行一次提供的函数”。

  • Array.map“创建一个新数组,其结果是在此数组中的每个元素上调用提供的函数。

因此,实际上不会返回任何内容。它只是为每个数组元素调用函数,然后就完成了。因此,您在该调用函数中返回的任何内容都会被简单地丢弃。forEach

另一方面,将类似地为每个数组元素调用函数,但它不会丢弃其返回值,而是捕获它并构建这些返回值的新数组。map

这也意味着您可以在任何地方使用,但您仍然不应该这样做,因此您不会在没有任何目的的情况下收集返回值。如果您不需要它们,则不收集它们会更有效率。mapforEach