首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Array.splice()这么慢?

为什么Array.splice()这么慢?
EN

Stack Overflow用户
提问于 2015-06-09 23:07:28
回答 2查看 7.1K关注 0票数 5

我最近看到了这个基准:http://jsperf.com/remove-element-splice-vs-move-and-pop

我注意到Array.splice()比遍历元素的for循环慢几个数量级。这让我想知道为什么Array.splice()这么慢。

因此,我来这里问您:为什么Array.splice()这么慢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-09 23:16:30

在这个基准中有一个谬误:.splice保持数组中元素的顺序,因此需要移动一半的元素,直到删除所创建的孔被筛选到最后,并且可以通过调整数组的大小来删除。因此,.splice工作在线性时间中。

相反,这段代码:

代码语言:javascript
复制
array[500000] = array[array.length-1];
array.pop();

将最后一个元素与要删除的元素交换,并缩短1元素的数组,这是可以在常数时间中完成的操作。从技术上讲,上面的片段甚至没有完成声明的目标,因为改变了数组 (!)中元素的顺序。比较:

代码语言:javascript
复制
> array.splice(500000,1)
> console.log(array[500000])
500001

通过以下方式:

代码语言:javascript
复制
> array[500000] = array[array.length-1];
> array.pop();
> console.log(array[500000])
999999
票数 6
EN

Stack Overflow用户

发布于 2015-06-09 23:16:50

splice将返回整个数组,减去已删除的项。因此,对于基准测试示例中的1元素,必须将其他499999个元素复制到一个新数组中。但是pop只需将数组缩短一个元素即可。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30744355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档