迭代稀疏数组

时间:2013-12-02 11:09:12

标签: javascript sparse-matrix

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)

1 个答案:

答案 0 :(得分:1)

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

  

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

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

  •   
  • 字典元素:
      专为稀疏数组而设计,它们内部没有所有元素。它实际上是一个哈希表,访问起来比“快速元素”更贵

  •   
     

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

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