JavaScript - 疎な配列の注意点

JavaScriptの配列で、 「要素が0から順に埋まっていない配列」を「疎な配列」といいます。

平たく言えば、間(あいだ)の要素が抜けている配列のことです。

反対に、要素がちゃんと埋まっている配列を「密な配列」といいます。

ここでは、「疎な配列」の説明と注意点を紹介します。

疎な配列とは?

要素が0から順に埋まっていない配列を「疎な配列」といいます。

例えば、Array()コンストラクタで作成したばかりの配列は「疎な配列」です。


var arr = new Array(3);

console.log(arr.length); // 3

console.log(arr); // Array [ <3 個の空スロット> ]

lengthプロパティの値は3なのですが、 中身は存在していません。

次のコードも疎な配列の例です。


var arr = [1, 2, 3];

arr[4] = 5;

console.log(arr.length); // 5

console.log(arr); // Array [ 1, 2, 3, <1 個の空スロット>, 5 ]

lengthプロパティの値は5ですが、実際の要素数は4です。

要素が存在しない部分は、ブラウザによって表示は異なりますが、 「空スロット」や「empty」などと表示されます。

「疎な配列」の注意点

先程の例で見たように、 「疎な配列」はlengthプロパティの値と、実際の要素数が一致しません。

lengthプロパティの方が大きくなります。

「疎な配列」をfor文でループしてみる

「疎な配列」を for文をループして、「インデックス」と「値」を表示してみます。

var arr = [1, 2, 3];

arr[4] = 5;

console.log(arr);

for (var i = 0; i < arr.length; i++){
	console.log(i, arr[i]);
}


// 実行結果
(5) [1, 2, 3, empty, 5]

0 1
1 2
2 3
3 undefined
4 5

ここで注目してほしいのは赤字部分、「3 undefined」と表示されている部分です。

これは、「undefined」が入っているのではなく、 存在しない要素を参照したために「undefined」が返ってきているだけです。

インデックスが3の要素は存在していません。

上の配列を表にすると次のようになります。

インデックス
01
12
23
45

まとめ

・JavaScriptでは、要素が0から順に埋まっていない配列を「疎な配列」といいます。

・「疎な配列」は、lengthプロパティの値と実際の要素数が一致しません。