在稀疏阵列上迭代

Iterating over sparse arrays

本文关键字:迭代 阵列      更新时间:2024-01-12

这个答案表明,在稀疏数组上迭代的最佳方法是使用for X in Array

然而,当我尝试这样做时,我失败了,因为X的类型是字符串,而不是我期望的整数索引。(一切都很好,直到我把它加到另一个整数上…)

var arr = [];
arr[10000] = "Hello";
var shifted = []
for (var x in arr)
    shifted[10+x] = arr[x];

"预期":

  shifted[10010] = "Hello

实际

  shifted["1010000"] = "Hello" 

有没有更好的方法可以使用索引迭代稀疏数组,或者我应该在需要的地方只使用Number(X)

V8(和其他JavaScript引擎)就是这样处理数组的:

V8使用两种不同的方法来处理数组:

  • 快速元素:
    专为一组键非常紧凑的阵列设计。它们有一个线性存储缓冲区,可以非常有效地访问。

  • 字典元素:
    专为稀疏阵列设计,这些阵列中并没有所有元素。它实际上是一个哈希表,访问成本比"快速元素"更高

来源:http://thibaultlaurens.github.io/javascript/2013/04/29/how-the-v8-engine-works/

当您使用稀疏数组时,密钥会转换为字符串,然后进行哈希处理。如果您想要数字键:不要使用稀疏数组或手动将键转换为数字。