小编给大家分享一下数组中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()有什么不同