This answer表示迭代稀疏数组的最佳方法是使用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)
?
答案 0 :(得分:1)
这是V8(和其他JavaScript引擎)处理数组的方式:
V8使用两种不同的方法来处理数组:
快速元素:
专为阵列设计,键组非常紧凑。它们具有线性存储缓冲区,可以非常有效地访问。字典元素:
专为稀疏数组而设计,它们内部没有所有元素。它实际上是一个哈希表,访问起来比“快速元素”更贵来源: http://thibaultlaurens.github.io/javascript/2013/04/29/how-the-v8-engine-works/
当您使用稀疏数组时,该键将转换为字符串然后进行哈希处理。如果需要数字键:不要使用稀疏数组或手动将键转换为数字。