2016-01-22 11 views
14

JavaScript配列が(ajax/JQueryを使用して)フォームに投稿されていると仮定すると、 は配列の順序が保証されていますか? は、アレイは、サーバー側の順序を保持することが保証されてJavaScript配列の順序は保証されていますか?

@Quentin から有効な質問は、「『形式で掲載さ』を定義」(理由は上記の)質問に拡大

$.ajax({ 
    type: "POST", 
    url: url, 
    data: { foo: [{ name: "one" }, { name: "two" }] }, 
    success: success, 
    dataType: dataType 
}); 

、 ?

+8

配列は順序付けされたコレクションです。 – MinusFour

+0

なぜ配列の順序が保持されないと思いますか?私が知る限り、物件の不動産の注文のみが保証されていません。 – Xufox

+0

私は注文が(他の言語で)保存されていない状況に遭遇しています。 – Dementic

答えて

17

あなたはいつも疑問にするときのECMAScript標準を参照することができます。Array Exotic Objects

アレイは、lengthプロパティが0からの整数であるプロパティに敬意をどのように扱われるかについて、追加のセマンティックを持っている言語でオブジェクトの特別な種類です〜2^32。 javascriptでは、除外されたlengthプロパティに0の範囲に欠損値がある場合、配列は疎である可能性があります。 forEachは欠損値を無視します。

欠損値とは何ですか?

言語は、通常のオブジェクトに対してできるだけ多くの動作をさせます。プロパティを追加したり、オブジェクトを配列から継承したりすることもできます。

var fruits = ["Apple", "Banana"]; 
fruits.preferred = "Apple"; 

この種のコードは問題を提起しませんが、書き始める場合:

fruits[100] = "Strawberry"; 
for(let i = 0; i < fruits.length; ++i) { 
... 
} 

100そうです^ 32 [0、2)の範囲内のプロパティ名です配列要素ですが、この時点ではfruits.lengthはどのようにすべきでしょうか?これは101でなければなりません。それ以外の場合、forループは決して "Strawberry"を取得しません。

しかし、この時点では決して定義されていない要素[2,99]の範囲があることを受け入れる必要があります。これらは値がありません。あなたはlengthプロパティ

var fruits = ["Apple", "Banana"]; 
fruits.length = 0; 

を変更する場合

逆に同じことが今、forループの条件を満たしている必要があり、配列の任意の要素を得ることはありません。これは、果物の配列を空に相当します。

それはあなたが昇順にそのすべての要素を反復が、値が欠落していることができることを心に留めておくことができますように、イエスの配列が順序付けられている欠損値に

を持っていることの結果で、長さをインクリメントすることも可能です

+1

'Missing Values'を拡張できますか? – Dementic

+0

少し広げて、希望があることを確かめてください。 –

+0

ありがとう、これは私がコメントしたブログ記事と似ていますが、他の人がこの便利な情報を見つけることは間違いありません。 – Dementic

関連する問題