0

Associate Array / Key Pair Array をキーのランダムな順序で配置することは可能ですか? 新しい要素を追加するたびに、javascript は自動的にキーを並べ替えます。

例えば、

として配列を作成しているとき

a[T1001] ="B"
a[T1005] = "A"
a[T1003] ="C"

後で配列リストが検証されると、配列が次のように自動的に並べ替えられていることがわかります。

a[T1001]
a[T1003]
a[T1005] 

配列に値を代入するときと同じ順序を維持することは可能ですか? Push メソッドを使用できません。個々のオブジェクトが値として追加されたインデックス付き配列を作成します。

4

2 に答える 2

3

JavaScript のオブジェクト (ここでは「配列」は単なるオブジェクトです) には、信頼できるプロパティの固有の順序はありません。

回避策として、キーの順序を別の配列に格納できます。

var order = [];

a['T1001'] = "B";
order.push( 'T1001' );
a['T1005'] = "A";
order.push( 'T1005' );
a['T1003'] = "C";
order.push( 'T1003' );

その後、順序配列をトラバースすると、必要な順序を取得できます。

for( var i=0; i<order.length; i++ ) {
  console.log( a[ order[i] ] );
}

編集

最初のリストから要素を削除するには、 and を使用する必要がありindexOfますsplice()

function delElement( arr, order, index ) {
  // get the position of the element within the order
  var position = order.indexOf( key );

  // delete element from list
  delete arr[ order[ pos ] ];

  // remove from ordering array
  order.splice( pos, 1 );
}
于 2013-07-03T09:42:23.860 に答える
0

オブジェクトを使用しているかのように見えます。オブジェクトのプロパティの並べ替えは保証されません。Internet Explorer(少なくとも古いバージョン)はプロパティを並べ替えないと思いますが、chromeはデフォルトで並べ替えます。

あなたのコードは無効です。プロパティが数値でない場合は文字列として持つ必要があります。そして、オブジェクトを使用する必要があります

a = {};
a["T1001"] ="B"
a["T1005"] = "A"
a["T1003"] ="C"

順序を維持したい場合は、2 つの配列を使用してプロパティと値を格納できます。オブジェクトの使用を主張する場合は、順序を保証できません。

2 つのアレイ

a1 = []; a2 = []
a1[0] = "T1001"; a2[0] = "B";
a1[1] = "T1005"; a2[1] = "A";
a1[2] = "T1003"; a2[2] = "C"; 

編集:あなたが間違っていることを推測していない限り、T1001などは数値を含む変数です。

于 2013-07-03T09:42:17.320 に答える