0

次のようなオブジェクトがあります。

{

    "2013": {
        "name": 2013,
        "ts_create": 1375254000000,
        "view_url": "some_url",
        "save_url": "some_url_2",
        "id": "",
        "exists": true,
        "children": []
        },
"2012": {
        "name": 2013,
        "ts_create": 1375254000000,
        "view_url": "some_url",
        "save_url": "some_url_2",
        "id": "",
        "exists": true,
        "children": []
        },
"2011": {
        "name": 2013,
        "ts_create": 1375254000000,
        "view_url": "some_url",
        "save_url": "some_url_2",
        "id": "",
        "exists": true,
        "children": []
        }
}

私が直面している問題は、このオブジェクトをループすると、オブジェクトが逆方向にループするように見えるのは Google Chrome だけです。

ループしてオブジェクトを表示すると、2013、2012、2011 のものがリストされるはずです。これは Firefox で発生します。ただし、メソッドに変更はなく、Chrome でもまったく同じオブジェクトです。2011、2012、2013 が表示されます。

したがって、このオブジェクトをループする前に、ある程度の並べ替えを適用する必要があることは明らかです。これは、Chrome がループを取得して逆方向に読み込もうとするためです。私が直面している問題は、JSでオブジェクトをソートする方法が完全にはわかりません

4

4 に答える 4

1

オブジェクトは順序付けされていないコレクションであるため、必要な順序付けを強制するのはユーザー次第です。

1 つの方法は、オブジェクト プロパティの配列を取得し、それらを並べ替えてから、配列を反復することです。

Object.keys(data)
      .sort(function(a, b) {
          return +b - +a;
       })
      .forEach(function(key) {
          var item = data[key];
      });

これは、単純な降順が必要であると想定しています。

于 2013-08-16T21:20:26.217 に答える
1

オブジェクト プロパティを反復処理する場合、順序は保証されません。オブジェクトを配列に追加し、代わりに配列を並べ替えることができます。

var obj = {"2012" : {}, "2011" : {}, "2013" : {}};
var arr = [];
for (var year in obj) {
    arr.push({year : year, data : obj[year]});
}
arr.sort(function(a,b) {
    return b.year - a.year;
});

http://jsfiddle.net/wK5KE/

于 2013-08-16T21:24:59.727 に答える
1

プロパティと値のペアの代わりに、この構造をオブジェクトの配列として実装します。含まれるオブジェクトの任意のプロパティで並べ替えることができる配列。

于 2013-08-16T21:19:53.597 に答える
0

ソートされた順序でキーを取得する 1 つの方法は、ここで定義されているメソッドを使用してキーの配列を生成することです。

JavaScript オブジェクト キー リストの取得

sort次に、javascript関数を使用できます。

http://www.w3schools.com/jsref/jsref_sort.asp

または、気が向いたら自分で書いてください。

object[key]次に、値を抽出するために使用して、キーの配列をループします。

于 2013-08-16T21:20:05.260 に答える