0

PHP:

 $arr[0] = 'A';
 $arr['C'] = 'C';
 $arr[10] = 'B';

 echo json_encode($arr);

JQuery:

 $.each(result, function(i, item) {
    console.log(i + " => " + item);
 });

望ましい出力:

   0 => A
   C => C
   10 => B

代わりに私は得る:

   0 => A
   10 => B
   C => C

PHPコードを変更したり、配列を再構築したりせずに、配列を並べ替えるのを防ぐにはどうすればよいですか?

編集:

firebug を使用して応答ヘッダーで ajax が呼び出されると、正しい順序で表示されます。

"0":"A","C":"C","10":"B"

ただし、 $.each ループ内で console.log を実行すると、順序が変更されます

4

1 に答える 1

3

あなた$arrは配列ではなくオブジェクトであり、キーはインデックス付けも順序付けもされていません。

JavaScript では、オブジェクト プロパティの反復順序については保証されません。配列のインデックス付きキー (つまり、整数キー) のみが保証されます。

プレーンなオブジェクトを反復処理するには、MDN が正確に指定$.eachする標準のfor..in構造を使用します

for...in ループは、オブジェクトのプロパティを任意の順序で反復します

任意のキーと値の順序を維持したい場合は、両方を適切な配列に格納する必要があります。

  var arr = [];
  arr.push({key:0, value:'A'});
  arr.push({key:'C', value:'C'});
  arr.push({key:10, value:'B'});
于 2013-04-22T18:48:28.337 に答える