1

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

{"Data": {
     "290": {
             ...
            }
     "300": {
             ...
            }
     "281": {
             ...
            }
         }
 }

トップ コンテナ キー (つまり、「290」、「300」、「281」) に基づいて、この JSON をどのように並べ替えますか?

編集:だから私は使った

$.getJSON('current/csf.txt', function(data) { arr = data["Data"]; }

そして、キーに基づいてそれらをソートしました。なぜこれが起こったのですか?

4

4 に答える 4

4

あなたの構造は間違っています、それは次のようなものでなければなりません:

{
  "Data": [
    {
      "id": "290"
    },
    {
      "id": "300"
    },
    {
      "id": "282"
    }
  ]
}

オブジェクトは順序付けされていないデータ用です。順序データには配列を使用します。そして、配列はここで本当に簡単にソートできます:

obj.Data.sort(function(a,b){
    return a.id - b.id;
});

次のようにこの構造に変換できます。

 function copyProps(dest, src) {
     for (var key in src) {
         dest[key] = src[key];
     }
     return dest;
 }

 var newData = [];

 for (var key in obj.Data) {
     newData.push(copyProps({
         id: key
     }, obj.Data[key]));
 }
于 2012-07-05T14:10:54.740 に答える
4

この「JavaScript」にタグを付けたので、「この JSON から生成された JavaScript オブジェクト」という意味だと思います。

その場合:

  1. プロパティ名をループします (for inループを使用)。
  2. それらを使用して配列を設定します。
  3. 配列をソートします。
  4. 配列をマップとして使用します。

(順序付けられたデータをオブジェクトに格納することはできません)。

結果を JSON で保存したい場合は、データ構造を変更する (そして (オブジェクトの) 配列を使用する) 必要があります。オブジェクトは明示的に順不同です。

于 2012-07-05T14:07:43.257 に答える
1

オブジェクト属性を並べ替えることができたとしても、並べ替えられた順序でそれらを読み戻すことができるという保証はありません。Javascriptでは、オブジェクト属性は特定の順序で保存されません。オブジェクトは単に属性を持っています。

配列の添字表記を使用してオブジェクト属性にアクセスすることはできないため、オブジェクト属性をキーで並べ替えるという概念は重要ではありません。

于 2012-07-05T14:12:28.640 に答える
1

Amberlamps のコメントに同意します。オブジェクトのキーを並べ替えようとするべきではありませんが何らかの理由で並べ替えたい場合は、underscore.js の sortBy メソッドを参照してください。

于 2012-07-05T14:08:33.613 に答える