4

その前にセルを設定せずに、高いインデックスの配列セルを設定している可能性がある状況があります。

>>> var arr = [];
undefined
>>> arr[5] = 'value';
"filled"
>>> arr
[undefined, undefined, undefined, undefined, undefined, "filled"]

そのような配列はどのようにメモリに格納されますか? 未定義の値ごとにスペースが割り当てられていますか?

私の実際のプロジェクトでは、非常に大きなインデックスを使用している可能性があります。たとえば、セル 500 ~ 800 と 900 ~ 1000 を設定できます。これらの空でないセルをループしてインデックスを認識する必要があるため、ハッシュを使用できません。このように配列を断片化すると、空のセルに大量のメモリが使用されるかどうかを知りたいです。

4

3 に答える 3

1

これらの空でないセルをループしてインデックスを認識する必要があるため、ハッシュを使用できません。

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]);
    }
}  
于 2012-04-13T18:11:46.073 に答える
1

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 がコメントしたように、配列の宣言されていない要素には割り当てられません。要素の値を明示的に未定義に設定した場合に当てはまるかどうかはわかりません(例:arr[somenum] = undefined;

于 2012-04-13T18:37:33.783 に答える
0

おそらく、最大インデックスを変数に格納し、次のようにマップにアクセスする必要があります。

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

次に、マップの(相対的な)コンパクトさと、未設定のインデックスをループする機能が得られます。

于 2012-04-13T18:13:43.153 に答える