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