.map() vs .forEach() vs for() 怎样挑选?

接见原文地点

.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()在实行完遍历以后会把il这两个元素挂起来,这让我们须要手动增添一些代码去消灭他们所占用的内存。

所以,这时候能够通知你的朋侪:

.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

    原文作者:sutaking
    原文地址: https://segmentfault.com/a/1190000007627597
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞