JavaScriptにおけるオブジェクトの非順序性
ご存知の通り、配列では各要素の位置がそのキーを決定するため、要素は厳格な順序で配置されます。 一方、オブジェクトではキーを自分で割り当てるため、要素が続く順序は重要ではありません。 つまり、配列は順序付けられたリストであり、オブジェクトはそうではないのです。
例として、次のようなオブジェクトを考えてみましょう:
let obj = {1: 'a', 2: 'b', 3: 'c'};
console.log(obj[1]); // 'a'を出力
console.log(obj[2]); // 'b'を出力
console.log(obj[3]); // 'c'を出力
このオブジェクトの要素を(もちろんキーと一緒に)任意の順序で入れ替えても、 スクリプトの動作は何も変わりません:
let obj = {3: 'c', 1: 'a', 2: 'b'};
console.log(obj[1]); // 'a'を出力
console.log(obj[2]); // 'b'を出力
console.log(obj[3]); // 'c'を出力
さらに、数値キーは配列のように、抜けのない全ての値を持つ必要はありません。 任意の数値を持つことができ、それによって問題が発生することはありません (配列の疎性に似ています)。 したがって、次のオブジェクトは正しいものです:
let obj = {7: 'a', 50: 'b', 23: 'c'};
オブジェクトを作成し、その中のキーの順序が重要ではないことを確認してください。