for... in
ループ内の順序は保証されません。
待って、何?
オブジェクト キーの「順序」にロジックはありません。必要に応じて、それらを取得して使用することができ.sort
ます。言語仕様は、for...in
反復アルゴリズムでこれを明示的に示しています。
プロパティを列挙するメカニズムと順序 (最初のアルゴリズムのステップ 6.a、2 番目のアルゴリズムのステップ 7.a) は指定されていません。
あなたのオプションは何ですか:
JavaScript では、ほとんどの場合、順序付きリストは配列で表されます。あなたの場合、順序付きリストのような場合は配列を使用できます。
var values= ["key1","key2","key3"];
for(var i=0;i<values.length;i++){
values[i];// order is guaranteed here.
}
順序が保証されているため、簡単に逆にすることもできます。
var values= ["key1","key2","key3"].reverse();//reverse is an array method
for(var i=0;i<values.length;i++){
values[i];// order is guaranteed here.
}
すでにオブジェクトがある場合は、そのキーと それらを何らかの基準に基づいて取得できます。たとえば、辞書順で:.sort
var obj = {"key1":"value1","key2":"value2","key3":"value3"};
var keys = Object.keys(obj).sort().reverse(); // see note
for(var i=0;i<keys.length;i++){
console.log(keys[i]);
}
// will output key3, key2, key1
.sort
注:チェーンする代わりに、コンパレーターを渡して逆にすることができます-これはおそらくより良い方法です。私は教育目的のためにそれをこのように保ちました。