4

たとえば、順序付けされたキー値で満たされたオブジェクトが既にある場合、for inステートメントを使用してそのキーを反復処理できます。

var keyvalues = {"key1":"value1","key2":"value2","key3":"value3"};
for(var key in keyvalues)
{
   var value = keyvalues[key];
   .............
}

今、私は'key3', 'key2', 'key1' のようにキーを逆方向に反復したいのですが、これを行う魔法の方法はありますか?

4

2 に答える 2

9

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注:チェーンする代わりに、コンパレーターを渡して逆にすることができます-これはおそらくより良い方法です。私は教育目的のためにそれをこのように保ちました。

于 2013-07-11T18:07:01.523 に答える