2012-04-14 5 views
0

私のJSONオブジェクトは、次のようになります。オブジェクトのプロパティをソート

events:{ 
"2": { 
    "action": "some value", 
    "property": "some value" 
} 
"0": { 
    "action": "some value", 
    "property": "some value" 
} 
"1": { 
    "action": "some value", 
    "property": "some value" 
} 

} 

私は、オブジェクトのプロパティをソートする必要があります。これを行うためにとにかくありますか?私のコメントに関連して、

events:{ 
"0": { 
    "action": "some value", 
    "property": "some value" 
} 
"1": { 
    "action": "some value", 
    "property": "some value" 
} 
"2": { 
    "action": "some value", 
    "property": "some value" 
} 

} 
+4

オブジェクトでは、[順序は保証されていません](http://stackoverflow.com/a/5525820/575527)。それらを代わりに配列に格納してください。 – Joseph

+2

@Joseph - それは答えでなければなりません。 :) – Quentin

+1

@Srikanth Kshatriy - JSONではなくオブジェクトリテラルです。 JSONはデータのシリアル化形式です。 – Quentin

答えて

1

が順序を保証するために見てみたいかもしれませんsome samples of sorting algorithmsあり、それは配列にする必要があります文字列を使用しているのでALPHABETICALなので、9以上の項目があると、eventOrderは["1"、 "10"、 "2"、...]になることがあります。これが望ましくない場合は、配列に格納する前にparseIntを実行し、後でルックアップを行うときに文字列に強制することができます。

+0

これは私の要求に最も適しています。ありがとう@webnesto –

+0

後で文字列を強制的に強制する必要はありません。 'alert(events [2])'は正常に動作します。 – RobG

+0

@RobG - あなたは技術的に正しいですが、その時点でJS型の変換に頼っています。評価のために "=="を使用するのと同じことです。引数の "==="側に来る場合は、ハッシュ検索に文字列を使用しているかどうかを確認したい場合もあります。 – webnesto

1

、この方法の代わりに、それを格納します:配列を使用し、IDとして、これらのインデックスを格納した結果は次のようにする必要があります。ソートアルゴリズムを使用してそれらを移動することができます。

var events = { 
    "2": { 
    "action": "some value", 
    "property": "some value" 
    }, 
    "0": { 
    "action": "some value", 
    "property": "some value" 
    }, 
    "1": { 
    "action": "some value", 
    "property": "some value" 
    } 
}; 

var eventOrder = []; 

for(var prop in events){ 
    if(events.hasOwnProperty(prop)){ 
    eventOrder.push(prop); 
    } 
} 

eventOrder.sort(); 

注:これはソートしようとしている@Josephが言ったように、ここで」あなたは

events:[ 
    { 
     "id" : 2, 
     "action": "some value", 
     "property": "some value" 
    }, 
    { 
     "id" : 0, 
     "action": "some value", 
     "property": "some value" 
    }, 
    { 
     "id" : 1, 
     "action": "some value", 
     "property": "some value" 
    } 
] 
+0

私は通常、順序とデータを別々の要素として保存することを好みます。{events:{"foo":{"id": "foo" ...}}、eventOrder:["foo"、...]} – webnesto