数组的拷贝for循环与slice性能对比

JS 专栏收录该内容
10 篇文章 0 订阅

在工作中用到数组拷贝的时候,经常需要生成一个新的数组,与原数组互不相干,以前一直用的for循环
(其实for循环只能拷贝简单的非对象数组而已,如果数组里面有数组或对象也不行,只是本篇不讨论对象深浅拷贝的问题),觉得写起来很麻烦,偶然情况下发现slice方法也可以拷贝(原谅我的无知,以前确实只用了for循环一种循环,而且一直以为for循环可以进行对象的深拷贝…)

说回for循环和slice
那我其实一直都存疑的,原生for循环与slice的性能到底谁好一点,一直以来,我都认为slice的性能肯定要低于for循环,因为slice本身是数组切割方法,内部应该也是用了for循环的(猜的,我并不是一个看源码、原理的人…),既然都用了循环,slice方法还要包装然后返回,那肯定原生的for循环效率更高啦!(女孩子的脑回路~~)

然后终于,今天把我的工作做完了想放松一下,月初刚开始尝试写博客,十天时间访问量就有1000+了,把我唬得杠杠的,我就屁颠屁颠跑来更新博客了。。。。

写完才发现控制的变量错误了,一直都是控制的拷贝次数,最后及时补上了数组长度的变量控制,只是没图啦,不想删,写了好久的

说回正题吧,

数组拷贝性能对比
首先,定义了一个基础的数组,里面内容是基本的数字、字符什么的(只要不是数组,对象就行),
然后定义了两个新的数组A、B
A数组用于for循环产生数组,B数组用于slice生成数组,
for循环拷贝数组性能
这里利用for循环直接赋值给A数组,循环10万次,用time来记录过程所花费的时间,下面更改一个数组的值,再看原数组的值有没有变化。

slice拷贝数组
这里利用slice函数生成新的数组,循坏次数以及其他操作都跟for循环相同,

结果:
for循环与slice循环对比
我试了几次,大致的结果跟这个差不多,循环10万次以上结果跟我想象的一样,for循环更优,接下来我把循环次数更改为1万次:
for循环与slice循环对比
然后更改了一下次数,发现在5万次左右,两者性能差不多~5万次以下for循环就不如slice了

接下来是最讨厌的总结时间啦:
在拷贝长度小的数组时,slice方法更优(谁没事去拷贝几万次数组),当然,实在要拷贝上万次数组那应该是for循环更优一点,大数组相反

我发现我的控制变量法从一开始变量就找错了,所以自己及时补拙,又加了数组大小作为控制变量,结果,不管数组有多长,拷贝的次数为1的情况下,居然都是slice更优!看来我最初对slice的工作原理的理解就有误。。。

其实吧,对于我们这种渣渣码农,才不想管什么性能呢,又不是大量数据操作,只能说,谁简单用谁,所以我选slice,然后今天做功课的时候发现还有concat方法也可以

同样的方法测了一下,发现不管数组长度大还是小,都是slice方法更优,长度1万左右的时候,slice和concat差不多,一万以上就还是slice更优了

碎碎念:比较concat、for和slice的时候,我居然生出了一种念头:好像这种状况似曾相识!原来是以前就比较过的,只是忘记了,所以写博客记录一下是多么地重要,感谢CSDN让我有了一个好笔头!

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

吕小胖纸

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值