JavaScript中Array的map函数和for的性能差不多?别闹了

在前端,我们需要将一个数组加工成另一个数组时,最常见的做法有两个:1. Array的成员方法map;2. 用for做循环。

两种方式的性能差异有多大?我们做个小实验。

方案1:

var foo = ['a','b']; 
var bar = foo.map(function(v){return v + "_bar";});

方案2:

var foo = ['a','b']; 
var bar = []; 
for (k=0; k< foo.length; k++) {
    var bar_o= foo[k]+'_bar';bar.push(bar_o);
}  

测试环境:
Chrome @ Windows 版本 104.0.5112.102(正式版本) (64 位)

利用Chrome的调试工具提供的Performance监控,重复1000000次后,检查耗时和内存。取3次测试的平均值。

项目方案1:map方案2:for
执行时间66111
JS HEAP增长1.92.0

从数据上看,执行时间差异较大,内存增量没有显著差异。为什么呢?

问题出在for中,使用push将对象添加到数组中,动态调整数组的长度。而map则是在调用之初直接创建出尺寸足够的数组,然后再分别更新各个对象的引用。后者的性能显然更快一些。

在这里插入图片描述

所以,是不是该检查一下那些运行较慢的代码,看看有哪些地方该换成map了?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低代码观察

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值