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

我知道有很多这样的话题。而且我知道基础知识:.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 ]

我不明白为什么要使用practice更改bto的值undefined。

如果这是一个愚蠢的问题,我感到很抱歉,但是我是这种语言的新手,到目前为止我发现的答案并不令我满意。


森栏
浏览 845回答 3
3回答

红糖糍粑

他们是不一样的。让我解释一下区别。forEach:这会遍历列表,并对每个列表成员应用一些有副作用的操作(例如:将每个列表项保存到数据库)map:这会遍历一个列表,转换该列表的每个成员,然后返回与转换后的成员大小相同的另一个列表(例如:将字符串列表转换为大写)

子衿沉夜

Array.forEach “每个数组元素执行一次提供的函数。”Array.map “创建一个新数组,其结果是对该数组中的每个元素调用一个提供的函数。”因此,forEach实际上不返回任何东西。它只是为每个数组元素调用函数,然后就完成了。因此,您在该调用函数中返回的所有内容都将被简单丢弃。另一方面,map将类似地为每个数组元素调用该函数,但不是丢弃其返回值,而是捕获它并构建这些返回值的新数组。这也意味着您可以map在任何使用位置使用它,forEach但是仍然不应该这样做,因此您不会出于任何目的而收集返回值。如果您不需要它们,不收集它们会更有效率。

烙印99

+ ---------------- + -------------------------------- ----- + --------------------------------------- +| | foreach | 地图|+ ---------------- + -------------------------------- ----- + --------------------------------------- +| 功能| 对每个|执行给定的操作。对|执行给定的“转换”| | 数组的元素| 每个元素的“副本” |+ ---------------- + -------------------------------- ----- + --------------------------------------- +| 返回值 返回未定义 返回转换后的新数组|| | | 保留原始数组的元素|| | | 不变+ ---------------- + -------------------------------- ----- + --------------------------------------- +| 首选| 执行非转换,如| 获取包含|的输出的数组| 使用场景| 在每个元素上进行处理。| 每个元素上完成的一些处理|| 和示例 | 的数组。|| | 例如,将所有元素保存在|中。|| | 数据库| 例如,获得|的数组| | | |中每个字符串的长度| | | 数组|+ ---------------- + -------------------------------- ----- + --------------------------------------- +
打开App,查看更多内容
随时随地看视频慕课网APP