3

integer次のようにキーを使用して、javascript で連想配列を作成する必要があります。

a["10"] = "ten";

しかし、配列を作成すると、値が配列の10thインデックスに配置され、長さ11の配列が作成されます。キーと値のペアにしたいです。オブジェクトを使用してこれを実行できることはわかっていますが、必要なのは配列のみです。

4

2 に答える 2

8

JavaScript には連想配列がありません。JavaScript でこれを行う唯一の方法は、オブジェクトを使用することです。

var a = {
    '10': 'ten'
};
于 2013-01-14T04:49:10.770 に答える
2

ECMAScriptには関連付けられた配列があります1 - オブジェクト (および拡張により配列) は例です

ただし配列の一部のプロパティは特別に扱われます。

配列オブジェクトは、特定のクラスのプロパティ名を特別に扱います。プロパティ名P(文字列値の形式) は、..ToString(ToUint32(P))と等しい場合にのみ、配列インデックスです。P

..具体的には、名前が配列インデックスであるプロパティが追加されるたびに、必要に応じて長さプロパティが変更され、その配列インデックスの数値よりも 1 つ大きくなります..

したがって、arr = []arr["1"]とは同じプロパティ名をarr[1]参照します。(プロパティ名)は上から「1」で0なので、そのプロパティへの代入は、または2になります。Plengtharr.lengthToUint32(P)+1

この動作を変更することはできません。特別なプロパティを持ちたくないlength場合は、配列の代わりに「通常の」オブジェクトを使用してください。ただし、Array.prototype関数の多くは、プロパティを持つ任意のオブジェクト (いくつかの実装上の癖は別として)で使用でき、独自のプロトタイプとして使用するようにオブジェクトを作成できます。lengthArray.prototype

そうは言っても、投稿は本当の問題が何であるかを述べていません。その特定の方法で実行する必要があると仮定する代わりに、意図が何であるかを説明することを検討してください。たとえば、なぜ a["10"]? オブジェクトがリストで使用される場合、「11個のアイテム」がある場合、何が問題になっていますか?


1この声明について議論する前に記事を読んでください: 名前の「配列」という用語は、順序付けられたシーケンスを意味するものではなく、長さの追加の概念やハッシュの使用などを排除するものでもありませ、それが何であるか、および特定の操作に必要な動作が何であるかを必ず指定してください。

于 2013-01-14T05:17:03.517 に答える