没有大厂的背景,只有一个心态积极的人。本文已收录到GitHubhttps://github.com/qq44924588...,文章已分类,也整理了很多我的文档和教程资料。最近开源了一个Vue组件,但是还不够完善。欢迎大家一起完善,也希望大家能给个star支持一下。谢谢。github地址:https://github.com/qq44924588...今天我们就来看看Array中Array.forEach()和Array.map()方法的区别。forEach()和map()方法通常用于遍历Array元素,但几乎没有区别,下面一一介绍。1.返回值forEach()方法返回undefined,而map()返回一个新数组,其中包含转换后的元素。constnumbers=[1,2,3,4,5];//使用forEach()constsquareUsingForEach=[];numbers.forEach(x=>squareUsingForEach.push(x*x));//使用map()constsquareUsingMap=numbers.映射(x=>x*x);安慰。日志(squareUsingForEach);//[1,4,9,16,25]控制台。日志(方形使用地图);//[1,4,9,16,25]由于forEach()返回undefined,我们需要传递一个空数组来创建一个新的转换数组。map()方法没有这个问题,它直接返回新的转换后的数组。在这种情况下,建议使用map()方法。2.链接其他方法map()方法的输出可以与其他方法(如reduce()、sort()、filter())链接起来,在一个语句中执行多个操作。另一方面,forEach()是一个终端方法,这意味着它不能与其他方法链接,因为它返回未定义。我们使用以下两种方法来计算数组中每个元素的平方和:onstnumbers=[1,2,3,4,5];//使用forEach()constsquareUsingForEach=[]letsumOfSquareUsingForEach=0;numbers.forEach(x=>squareUsingForEach.push(x*x));squareUsingForEach.forEach(square=>sumOfSquareUsingForEach+=square);//使用map()constsumOfSquareUsingMap=numbers.map(x=>x*x).reduce((总计,价值)=>总计+价值);控制台日志(sumOfSquareUsingForEach);//55console.log(sumOfSquareUsingMap);//55当需要进行多个操作时,使用forEach()方法是一项非常繁琐的工作。在这种情况下,我们可以使用map()方法。3.性能//Array:varnumbers=[];for(vari=0;i<1000000;i++){numbers.push(Math.floor((Math.random()*1000)+1));}//1.forEach()console.time("forEach");constsquareUsingForEach=[];numbers.forEach(x=>squareUsingForEach.push(x*x));console.timeEnd("forEach");//2.map()console.time("map");constsquareUsingMap=numbers.map(x=>x*x);console.timeEnd("地图");这是MacBookPro上的GoogleChromev83.0.4103。在106(64位)上运行上述代码的结果。建议复制上面的代码到自己的控制台试试。forEach:26.596923828125msmap:21.97998046875ms很明显,map()方法对于元素的转换要优于forEach()方法。4.中断遍历这两种方法都不能被break打断,否则会抛出异常:constnumbers=[1,2,3,4,5];//break;在forEach()里面constsquareUsingForEach=[];numbers.forEach(x=>{if(x==3)break;//<-SyntaxErrorsquareUsingForEach.push(x*x);});//中断;insidemap()constsquareUsingMap=numbers.map(x=>{if(x==3)break;//<-SyntaxErrorreturnx*x;});上面的代码会抛出SyntaxError:?UncaughtSyntaxError:Illegalbreakstatement如果需要中断遍历,应该使用简单的for循环或for-of/for-in循环。constnumbers=[1,2,3,4,5];//中断;在for-of循??环中constsquareUsingForEach=[];for(xofnumbers){if(x==3)break;squareUsingForEach.push(x*x);};console.log(squareUsingForEach);//[1,4]5.最后推荐使用map()对数组元素进行变换,语法更短,可链接,性能更好。如果不想返回数组或转换数组的元素,请使用forEach()方法。最后,如果你想根据某些条件停止或中断数组的便利性,你应该使用简单的for循环或for-of/for-in循环。代码部署后可能存在的bug,无法实时获知。事后为了解决这些bug,花费了大量的时间在日志调试上。顺便推荐一个好用的bug监控工具Fundebug。原文:https://codingnconcepts.com/j...每周更新交流文章。可以微信搜索“大千世界”阅读即时更新(比博文早一两篇)。这篇文章在GitHubhttps://github.com/qq449245884/xiaozhi已经收录,整理了很多我的文档。欢迎star和改进。可以参考考点面试。另外,关注公众号,后台会回复福利,看到福利就知道了。
