.map() vs .forEach() vs for()
笔者说,本身基础没怎么用过for()
来遍历,主假如用.forEach()
。
然则老是会被许多朋侪说,这些人以为for()
的速率要比.forEach()
快一点。(实在这基础没有依据,下面会讲)
速率固然是很主要的,然则我们也须要从其他方面斟酌一下,特别是代码资本。
这里有一篇很棒的文章,很好的剖析了for()
遍历。它同时也针对for()遍历和
.forEach()做了比对[测试](https://jsperf.com/for-vs-foreach/37)。
for()与
.forEach()`比拟会斲丧更多的内存。
如许,又回到了老题目,是用空间换速率,照样反之?
固然,都很主要。起首,这2个方面都不会成为你代码中的瓶颈题目。其次,那些小小的优化技能也不会很好的均衡这2个题目,只会增添你的工作量罢了。那我在来看下可读性、可控性、以及可维护性之间的对照呢。
让我们先来看个基础的sample
比方这个数组
var arr = [1, 2, 3];
.map()
:
arr.map(fcuntion(i) {
console.log(i);
})
43个字母
.forEach()
:
arr.forEach(function(i){
console.log(i)
})
47个字母
for()
for(var i=0,l=arr.lengrh;i<l; i++) {
console.log(i);
}
70个字母
.map()
和.forEach()
明显要简短一些,而且他们的可读性更强,同时他们也创建了各自的scope
,而for()
在实行完遍历以后会把i
和l
这两个元素挂起来,这让我们须要手动增添一些代码去消灭他们所占用的内存。
所以,这时候能够通知你的朋侪:
用.forEach()
或许.map()
。
.map() vs .forEach()
那末接下来,我继承做剖析,为何更引荐用.map()
,而不是.forEach()
?
起首,.map()
要比.forEach()
实行速率更快。虽然我也说过实行速率不是我们须要斟酌的主要因素,然则他们都比for()
要更好用,那肯定要选更优化的一个。
第二,.forEach()
的返回值并非array。假如你想用函数式编程写个链式表达式来装个逼,.map()
将会是你不贰的挑选。
来看下面这个例子:
var arr = [1, 2, 3];
console.log(
arr.map(function(i){
return i+i;
})
//链式作风
.sort()
);// [2,4,6]
console.log(
arr.forEach(function(i){
return i+i;
})
//接不起来,断了
.sort()
);//TypeError: Cannot read property 'sort' of undefined
末了
依据上面的代码,人人应当相识到.forEach()
跟.map()
的范围。
末了,谢谢人人耐烦的浏览,排个序
.map() > .forEach() > for()
英文原文
https://ryanpcmcquen.org/javascript/2015/10/25/map-vs-foreach-vs-for.html