为什么比拼接数组更快地从对象中删除?

时间:2016-07-12 00:44:43

标签: javascript arrays

我很想知道数组和对象之间的速度差异,因此我设置了一个测试,用于填充,访问和删除数组和对象中的100,000个项目。访问和填充阵列大约相当于~3ms的差异。但是,从阵列中删除会导致 604ms 差异(10ms vs 614ms)。为什么是这样?我认为对象和数组几乎相同。

演示https://codecanister.com/Project/b9f8de7c/1/result/

2 个答案:

答案 0 :(得分:2)

执行此操作.splice()时,必须重新分配所有后续数组条目。也就是说,必须更改拼接后的每个属性名称。除了属性的直线性遍历之外,没有好办法做到这一点;一个使该操作快速运行的数据结构会使其他更常见的操作变慢。

所以考虑数组[1, 2, 3, 4]。财产的价值" 0"是1。如果您将该条目拼接出来,那么运行时必须设置属性" 0"到2,财产" 1"到3和财产" 2"到4

答案 1 :(得分:0)

您只需执行不同的操作即可。 "删除"只是将数组位置设置为undefined。虽然splice将通过对阵列的所有10,000个项目使用arr [i] = arr [i + 1]执行循环来完全删除它。您为所有10.000项目执行此操作。另请参阅this question