2

あなたができるJavaScriptオブジェクトをループするには

for(key in object){
   // sth. great...
}

このメソッドでオブジェクトを逆方向にループすることは可能ですか? 前もって感謝します。

4

2 に答える 2

5

それは不可能だろう

ECMAScript オブジェクトは、プロパティES3 仕様の順不同のコレクションです

プロパティを列挙するメカニズムと順序(最初のアルゴリズムのステップ 6.a、2 番目のアルゴリズムのステップ 7.a)は指定されていません。

列挙されているオブジェクトのプロパティは、列挙中に削除される場合があります。列挙中にまだ訪問されていないプロパティが削除された場合、そのプロパティは訪問されません。列挙中に列挙されているオブジェクトに新しいプロパティが追加された場合、新しく追加されたプロパティがアクティブな列挙でアクセスされるとは限りません。プロパティ名は、列挙内で複数回アクセスしてはなりません。ES5 仕様

ただし、できることは、オブジェクトのキー配列を逆方向に反復することです。これは、オブジェクトに魔法のように命令を与えるという意味ではありません。

var obj = {a: 0, b:1, c:2};
for (var keys=Object.keys (obj),key; key = keys.pop() ;) {
    console.log (key) // c, b, a.
}

于 2013-10-18T12:31:09.993 に答える
3

「前進」と「後退」はありません。JavaScript のオブジェクト キーには順序がありません。

ほとんどのブラウザーは追加された順序でそれらをループしますが、それは保証されておらず、仕様の一部ではありません。

したがって、答えは次のとおりです。いいえ、できません。


あなたが主張するなら、これをしてください:

var keys = [], key, i;

for ( key in object ) {
    object.hasOwnProperty(key) && keys.push(key);
}

i = keys.length;

while ( i-- ) {
    // use object[ keys[i] ]
}

これがフィドルです:http://jsfiddle.net/MBpcq/

于 2013-10-18T12:27:04.783 に答える