2016-05-09 7 views
0

enter image description hereJSON.stringifyは、私は(スクリーンショットを参照)私のオブジェクトに<code>JSON.strigify()</code>を使用しようとしている間違ったインデックス構造に

を与えます。

私は期待していない結果を得ていますが、オブジェクトインデックスの順序が間違っています。あなたが最初のインデックスが9:0で見ることができるようhttp://vpaste.net/LqNlq

が、期待通りではない8:0

全文字列化されたJSON、こちらから参照できます。

ここで問題は何ですか?

+3

配列とは異なり、オブジェクトプロパティは予測可能な方法で並べられません。すべてのブラウザがそれを独自の方法で行い、この順序に頼ることはできません。オブジェクトを_sortできません。 – blex

+1

このために配列を使用して調べる必要がありますが、オブジェクトのプロパティの順序は保証されていません。 http://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order – IrkenInvader

+0

これはおそらくChromeです。 –

答えて

1

JavaScriptのオブジェクトのキーは、どのような順序であっても保証されません。

注文を保存する代わりに、オブジェクトの配列にする必要があります。

あなたはトップレベルのキー("1""2"など)の順序で繰り返し処理することが予想される場合

{ 
    "1": [ 
    { "key": "8:0", ... }, 
    { "key": "8:30", ... }, 
    ... 
    ], 
    "2": ... 
} 

これ

も同じ構造でなければなりません。

+0

すべてのMSIEのバージョンは、エントリの順序を保持します。速いwannabesはしません!それは自然に期待される動作だからです。これは経験的要件であり、標準が明示的にそれを述べていないかどうかは気になります。実装で、ブラウザベンダー固有の実装に重要な自己理解要件が残っている場合、明示的にその順序を保持する必要がないため、単純にシャッフルすることは自由ではありません。 –

+2

あなたが言ったことはすべて意見の問題です。実際、ブラウザは異なるオブジェクトの順序を持​​つことができるため、オブジェクトを反復処理してはならないというさらなる証拠です。オブジェクトを連想配列として使用しないでください。データを構造化するためのより論理的な方法があります。 – MattDiamant

+1

@BekimBacaj - それを行う特定の方法が_ "重要な自己理解要件" _であると言っても、それは真実ではありません。私は注文をするためにプロパティを必要とせずに10年以上にわたってECMAScriptをプログラミングしました。配列を持つものは配列で保持されます。そして、「それらをシャッフルすることを自由にする」_実際には、ほとんどの文字通りの意味で、仕様書が注文を記述していないときの意味です。 –

関連する問題