资讯专栏INFORMATION COLUMN

.map() vs .forEach() vs for() 如何选择?

iliyaku / 472人阅读

摘要:但是总是会被很多朋友说,这些人认为的速度要比快一点。如果你想用函数式编程写个链式表达式来装个逼,将会是你不二的选择。来看下面这个例子链式风格接不起来,断了最后根据上面的代码,大家应该了解到跟的局限。

访问原文地址

.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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91156.html

相关文章

  • for...in VS. for...of

    摘要:在种和一样都具有遍历数组的功能,但是他们的返回结果并不相同,使用遍历数组时,无法使用中断循环,也无法使用中断,当然使用也不能返回到外层函数。枚举对象循环不支持普通对象,如果想迭代一个对象的属性,可以使用内建的方法使用方法获取对象的数组 先看下面这两种写法:1. tabList.forEach((tab, i) => { if (tab.is_main) { th...

    Anchorer 评论0 收藏0
  • JavaScript中MapForEach的区别

    摘要:示例下方提供了一个数组,如果我们想将其中的每一个元素翻倍,我们可以使用和来达到目的。注意,是不会返回有意义的值的。允许更改原始数组的元素。自从年双十一正式上线,累计处理了亿错误事件,得到了金山软件等众多知名用户的认可。 译者按: 惯用Haskell的我更爱map。 原文: JavaScript — Map vs. ForEach - What’s the difference bet...

    charles_paul 评论0 收藏0
  • Java 8 vs. Scala(二):Stream vs. Collection

    摘要:比如对一个数据流进行过滤映射以及求和运算,通过使用延后机制,那么所有操作只要遍历一次,从而减少中间调用。这里需知道中的元素都是延迟计算的,正因为此,能够计算无限数据流。 【编者按】在之前文章中,我们介绍了 Java 8和Scala的Lambda表达式对比。在本文,将进行 Hussachai Puripunpinyo Java 和 Scala 对比三部曲的第二部分,主要关注 Stream...

    GeekGhc 评论0 收藏0
  • js--遍历数组和对象方法及其效率--for-forof--foreach--forin

    摘要:数组优化版优化版谷歌版本正式版本位优化版火狐版本优化版结论这是一个尴尬的结论,谷歌火狐,同样是最新版本或许谷歌才是王道,火狐跳舞吧,颤抖吧,你也太慢了吧,以谷歌为准相对来说作为新的遍历方法具有可观的效率对象 数组 var arr = new Array(10000000); var arr1 = []; var arr2 = []; var arr3 =...

    ThinkSNS 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<