译者:前端小智
作者: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和欠缺,大家面试能够参照考点温习,另外关注公众号,后盾回复福利,即可看到福利,你懂的。