数组中forEach()和map()有什么不同

  介绍

小编给大家分享一下数组中forEach()和map()有什么不同,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!

数组中<代码> Array.forEach() 和<代码> Array.map() 方法之间的区别。

<代码> forEach() 和<代码> map() 方法通常用于遍历数组元素,但几乎没有区别,我们来一一介绍。

<强> 1。返回值

<代码> forEach() 方法返回<代码>定义> map() 返回一个包含已转换元素的新数组。

const  numbers =, (1,, 2,, 3,, 4,, 5];//,使用,forEach ()   const  squareUsingForEach =, [];   numbers.forEach (x =祝辞,squareUsingForEach.push (x * x));//,使用,map ()   const  squareUsingMap =, numbers.map (x =祝辞,x * x);      console.log (squareUsingForEach);,//,(1, 4, 9日,16日,25)   console.log (squareUsingMap);,,,,,//,(1, 4, 9日,16日,25)

由于<代码> forEach() 返回<代码>定义> 地图()方法不存在这样的问题,它直接返回新的转换后的数组。在这种情况下,建议使用<代码> map() 方法。

<强> 2。链接其他方法

<代码> map() 方法输出可以与其他方法(如<代码>减少(),<代码>(),<代码> filter() )链接在一起,以便在一条语句中执行多个操作。

另一方面,<代码> forEach() 是一个终端方法,这意味着它不能与其他方法链接,因为它返回<代码>未定义的

我们使用以下两种方法找出数组中每个元素的平方和:

onst  numbers =, (1,, 2,, 3,, 4,, 5];//,使用,forEach ()   const  squareUsingForEach =, []   let  sumOfSquareUsingForEach =, 0;   numbers.forEach (x =祝辞,squareUsingForEach.push (x * x));   squareUsingForEach.forEach (square =祝辞,sumOfSquareUsingForEach  +=,广场);//,使用,map ()   const  sumOfSquareUsingMap =, numbers.map (x =祝辞,x * x) .reduce((总,,值),=祝辞,total  +,值)   ;      console.log (sumOfSquareUsingForEach);//, 55   console.log (sumOfSquareUsingMap);,,,,,//, 55

当需要多个操作时,使用<代码> forEach() 方法是一项非常乏味的工作。我们可以在这种情况下使用<代码> map() 方法。

<强> 3。性能

//,数组:   var  numbers =, [];   for  (, var 小姐:=,0;,小姐:& lt;, 1000000;,我+ +,),{   ,,,numbers.push (Math.floor ((math . random (), *, 1000), +, - 1));   }//,1只forEach ()   console.time (“forEach");   const  squareUsingForEach =, [];   numbers.forEach (x =祝辞,squareUsingForEach.push (x * x));   console.timeEnd (“forEach");//,2只(地图)   console.time (“map");   const  squareUsingMap =, numbers.map (x =祝辞,x * x);   console.timeEnd (“map");

这是在MacBook Pro的<强> Google Chrome v83.0.4103.106(64位)上运行上述代码后的结果。建议复制上面的代码,然后在自己控制台中尝试一下。

forEach: 26.596923828125毫秒   地图:,,,,,21.97998046875毫秒

显然,<代码> map() 方法比<代码> forEach() 转换元素要好。

<强> 4。中断遍历

这两种方法都不能用<代码> 中打破断,否则会引发异常:

const  numbers =, (1,, 2,, 3,, 4,, 5];//时间休息;大敌;;inside  forEach ()   const  squareUsingForEach =, [];   numbers.forEach (x =祝辞,{,   如果才能(==x  3),打破,,//,& lt;作用;SyntaxError    squareUsingForEach.push才能(x *);   });//,打破;,inside 地图()   const  squareUsingMap =, numbers.map (x =祝辞,{   如果才能(==x  3),打破,,//,& lt;作用;SyntaxError    return 才能;x *;   });

上面代码会抛出<代码> SyntaxError :

?,Uncaught  SyntaxError:, Illegal  break 声明

如果需要中断遍历,则应使用简单的对循环或<代码>的<代码>//<代码>工党循环。

const  numbers =, (1,, 2,, 3,, 4,, 5];//,打破;inside  for-of 循环   const  squareUsingForEach =, [];   (x  of 数字){   如果才能(==x  3),打破;   squareUsingForEach.push才能(x *);   };      console.log (squareUsingForEach);,//, (1, 4)

数组中forEach()和map()有什么不同