在稀疏阵列上迭代
Iterating over sparse arrays
这个答案表明,在稀疏数组上迭代的最佳方法是使用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/
当您使用稀疏数组时,密钥会转换为字符串,然后进行哈希处理。如果您想要数字键:不要使用稀疏数组或手动将键转换为数字。
相关文章:
- 如何在javascript中迭代数字列表
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 如何迭代Array.prototype函数
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 在ejs-partial中对JSON对象进行迭代
- 如何在DataTables 2.1中迭代对象数组
- 使用递归属性迭代保留属性结构
- 正在停止.在jquery中的特定时间间隔内,每次迭代的每次执行
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- 主干-从模板中迭代的集合中获取特定的模型
- 创建一个方法,通过一个窗口进行迭代并获取Titanium中的所有控件
- 什么's是在javascript中迭代项的最佳方式
- 为什么这只是迭代 HTMLCollection 的奇怪元素
- 是否“;对于的“;循环迭代遵循JavaScript中的数组顺序
- Babel编译错误:找不到模块核心js/library/fn/get迭代器
- 在es6中,将带有回调的事件侦听器设置为可迭代的
- jQuery-迭代不正确?(太长,无法执行)
- 在稀疏阵列上迭代
- 将数据推送到阵列,然后迭代
- IE 8 阵列迭代