繁体   English   中英

空单元格如何存储在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。 我不能使用哈希,因为我需要遍历这些非空单元格并了解它们的索引。 我想知道是否像这样对数组进行碎片整理会为空单元格占用大量内存。

我不能使用哈希,因为我需要遍历这些非空单元格并了解它们的索引。

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]);
    }
}  

紧靠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;

您可能应该只将max索引存储在变量中,然后按以下方式访问地图:

for (var i=0; i<=maxIndex; i++) {
 console.log(myMap[i]);
}

然后,您将具有地图的(相对)兼容性,并能够遍历未设置的索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM