47

したがって、次のような JavaScript オブジェクトがあります。

foo = {
  "one": "some",
  "two": "thing",
  "three": "else"
};

これを次のようにループできます。

for (var i in foo) {
  if (foo.hasOwnProperty(i)) {
    // do something
  }
}

one> two>の順にプロパティをループしますthree

ただし、逆の順序で実行する必要がある場合があるため、同じループを実行したいのですがthree> two> one.

質問:
「オブジェクトリバース」機能はありますか? それが配列の場合、新しい配列を逆にするか構築することができunshiftますが、オブジェクトのプロパティを逆ループする必要がある場合、オブジェクトをどうするかわかりません。何か案は?

ありがとう!

4

5 に答える 5

6

オブジェクトを逆方向にループする方法はありませんが、逆の順序でオブジェクトを再作成すれば成功です! ただし、オブジェクトの順序が変更されても同じままであると言うものは何もないため、これは興味深い結果につながる可能性がありますが、ほとんどの場合は機能します...

function ReverseObject(Obj){
    var TempArr = [];
    var NewObj = [];
    for (var Key in Obj){
        TempArr.push(Key);
    }
    for (var i = TempArr.length-1; i >= 0; i--){
        NewObj[TempArr[i]] = [];
    }
    return NewObj;
}

このようにオブジェクトをスワップするだけです-

MyObject = ReverseObject(MyObject);

ループは次のようになります-

for (var KeysAreNowBackwards in MyObject){
    alert(MyObject[KeysAreNowBackwards]);
} 
于 2015-09-29T14:45:37.403 に答える
0

使用できます

Object.keys

注意すべきことの 1 つは、ソートされたキーのリストを返すことです (キーが数値の場合)。それに応じて変更する必要があるかもしれません。

a =   {'d':'stack','l':'overflow','b':'out','a':'first','z':'empty'}
out = Object.keys(a).reverse()
console.warn("When key contains characters : "+out)

a =   {'1':'stack','4':'overflow','2':'out','5':'first','3':'empty'}
out = Object.keys(a).reverse()
console.warn("When key is a numerical string : "+out)

于 2022-01-26T09:20:04.840 に答える