如何在 JavaScript 中的稀疏数组中存储空单元格
How are empty cells stored in a sparse array in JavaScript?
>我遇到一种情况,我可能正在设置高索引的数组单元格,而没有设置它之前的任何单元格。
>>> var arr = [];
undefined
>>> arr[5] = 'value';
"filled"
>>> arr
[undefined, undefined, undefined, undefined, undefined, "filled"]
这样的数组如何存储在内存中?是否为每个未定义的值分配了空间?
在我的实际项目中,我可能会使用非常大的索引。例如,我可以设置单元格 500-800 和 900-1000。我不能使用哈希,因为我需要遍历这些非空单元格并注意它们的索引。我想知道像这样对数组进行分段是否会为空单元格占用大量内存。
结合
aefxx 的答案,您仍然可以迭代:
var obj = {500: "foo", 10923: "bar"};
var max = 0;
for (var key in obj)
max=key>max?key:(max||key); // get max key
for (var i=0; i<=max; i++)
console.log(obj[i]); // output even the undefined
正如 Phrogz 评论的那样,它不会为数组中未声明的元素分配。 如果您明确将元素值设置为 undefined,我不确定是否是这种情况(例如 arr[somenum] = undefined;
)
我不能使用哈希,因为我需要遍历这些非空单元格并注意它们的索引。
for (x in ...)
语言结构有什么问题?
编辑以适应vol7ron的评论:
var x = {2: "foo", 999: "bar"};
for ( var n in x ) {
if ( x.hasOwnProperty(n) ) {
console.log(n);
console.log(x[n]);
}
}
您可能应该简单地将最大索引存储在变量中,然后像这样访问您的地图:
for (var i=0; i<=maxIndex; i++) {
console.log(myMap[i]);
}
然后,您将拥有地图的(相对)兼容性以及循环访问未设置索引的能力。
相关文章:
- 将数组存储到本地存储中,而不是替换
- 如何将数组存储
- 在 laravel 4 上使用循环将数据数组存储到单个数组中
- 将对象/数组存储在 jQuery Cookie 中
- 想要将数组存储为 JavaScript 映射中的值
- 在 mysql 中使用多维数组存储 $_POST
- 将php多维数组存储在localstorage中
- 将数组存储在jQuery cookie中
- 如何将php数组存储在一个cookie中,然后通过javascript读取它
- 如何用单引号将数组存储在javascript中?有可能吗
- 将数组存储在html数据属性中
- 使用javascript将数组存储为json中的密钥对
- 将数组存储在函数内部与存储在对象内部有什么好处吗
- 试图使用javascript将Object.keys(obj)的返回数组存储在数组中,但得到错误“ReferenceEr
- 在javascript中使用数组存储一组具有固定值的变量
- 如何在localStorage (Javascript)中使用数组存储JSON
- 数组存储javascript
- 我如何从数组存储访问JS函数
- 关于如何使用数组存储其他变量名称的任何想法
- 在chartJs中使用动态数组存储标签和数据