译者:前端小智
作者:Ashish Lahoti
起源:odingnconcepts
点赞再看,微信搜寻【大迁世界】关注这个没有大厂背景,但有着一股向上踊跃心态人。本文 GitHub
https://github.com/qq44924588... 上曾经收录,文章的已分类,也整顿了很多我的文档,和教程材料。**
双12阿里服务器27
块,通用点击这里购买能够找我返现30,等于27
块就能买到了,只限新用户,能够用家人的手机号购买!
明天咱们来看一下 Array中 Array.forEach()
和 Array.map()
办法之间的区别。
forEach()
和map()
办法通常用于遍历Array元素,但简直没有区别,咱们来一一介绍。
1.返回值
forEach()
办法返回undefined
,而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()
返回undefined
,所以咱们须要传递一个空数组来创立一个新的转换后的数组。map()
办法不存在这样的问题,它间接返回新的转换后的数组。在这种状况下,倡议应用map()
办法。
2.链接其余办法
map()
办法输入能够与其余办法(如reduce()
、sort()
、filter()
)链接在一起,以便在一条语句中执行多个操作。
另一方面,forEach()
是一个终端办法,这意味着它不能与其余办法链接,因为它返回undefined
。
咱们应用以下两种办法找出数组中每个元素的平方和:
onst numbers = [1, 2, 3, 4, 5];// 应用 forEach()const squareUsingForEach = []let sumOfSquareUsingForEach = 0;numbers.forEach(x => squareUsingForEach.push(x*x));squareUsingForEach.forEach(square => sumOfSquareUsingForEach += square);// 应用 map()const sumOfSquareUsingMap = numbers.map(x => x*x).reduce((total, value) => total + value);console.log(sumOfSquareUsingForEach); // 55console.log(sumOfSquareUsingMap); // 55
当须要多个操作时,应用forEach()
办法是一项十分乏味的工作。咱们能够在这种状况下应用map()
办法。
3.性能
// Array:var numbers = [];for ( var i = 0; i < 1000000; i++ ) { 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. map()console.time("map");const squareUsingMap = numbers.map(x => x*x);console.timeEnd("map");
这是在MacBook Pro的 Google Chrome v83.0.4103.106(64位)上运行上述代码后的后果。 倡议复制下面的代码,而后在本人控制台中尝试一下。
forEach: 26.596923828125msmap: 21.97998046875ms
显然,map()
办法比forEach()
转换元素要好。
4.中断遍历
这两种办法都不能用 break
中断,否则会引发异样:
const numbers = [1, 2, 3, 4, 5];// break; inside forEach()const squareUsingForEach = [];numbers.forEach(x => { if(x == 3) break; // <- SyntaxError squareUsingForEach.push(x*x);});// break; inside map()const squareUsingMap = numbers.map(x => { if(x == 3) break; // <- SyntaxError return x*x;});
下面代码会抛出 SyntaxError
:
ⓧ Uncaught SyntaxError: Illegal break statement
如果须要中断遍历,则应应用简略的for循环或for-of
/for-in
循环。
const numbers = [1, 2, 3, 4, 5];// break; inside for-of loopconst squareUsingForEach = [];for(x of numbers){ if(x == 3) break; squareUsingForEach.push(x*x);};console.log(squareUsingForEach); // [1, 4]
5. 最初
倡议应用map()
转换数组的元素,因为它语法短,可链接且性能更好。
如果不想返回的数组或不转换数组的元素,则应用forEach()
办法。
最初,如果要基于某种条件进行或中断数组的便当,则应应用简略的for循环或for-of
/ for-in
循环。
代码部署后可能存在的BUG没法实时晓得,预先为了解决这些BUG,花了大量的工夫进行log 调试,这边顺便给大家举荐一个好用的BUG监控工具 Fundebug。
原文:https://codingnconcepts.com/j...
交换
文章每周继续更新,能够微信搜寻「 大迁世界 」第一工夫浏览和催更(比博客早一到两篇哟),本文 GitHub https://github.com/qq449245884/xiaozhi 曾经收录,整顿了很多我的文档,欢送Star和欠缺,大家面试能够参照考点温习,另外关注公众号,后盾回复福利,即可看到福利,你懂的。