web-dev-qa-db-ja.com

JavaScript-連想配列を宣言する短い方法

PHPのように連想配列を宣言する簡単な方法はありますか?

$myArray = array('a' => 'b'); // PHP Way

JavaScriptでは、次のようにします。

var myArray = [];
myArray['a'] = 'b';

私はJavaScriptオブジェクトを探していません。

26
js-coder

JavaScriptには連想配列はありません。あなたの例では、myArrayを配列として宣言していますが、それにオブジェクトを割り当てています。したがって、コードはこれと同じです:

var myObject = {};
myObject['a'] = 'b';

更新:少し修正。実際、元のコードは配列を破壊しません。通常のプロパティを追加するだけです。これは、JavaScript配列がJavaScriptオブジェクトのサブセットであるために可能です。

25

次のようなオブジェクトを宣言します。

var myArray = {"a": "b", "c": "d"};

...そして、次のように各項目を参照します。

var somethingElse = myArray["a"]; //Sets "somethingElse" to "b".

@Chrisと@Marcがコメントで言及しているように、JavaScriptでは、オブジェクトは連想配列であり、その逆の場合も、同じことを行う2つの異なる方法を参照するだけです。例えば...

var somethingElse = myArray["a"];
var anotherVariable = myArray.a;

...同じことをします。

26
Karl Nicoll

私はJavaScriptオブジェクトを探していません。

JavaScriptには「連想配列」はなく、プロパティ名と値で構成されるオブジェクトとして扱われます。つまり、探しているのは実際にはオブジェクトです。実際、あなたの質問からのこの例はオブジェクトを操作しています:

var myArray = [];
myArray['a'] = 'b';
alert(typeof myArray); // 'object'

最初に、配列リテラル構文を使用してオブジェクトを作成します。

var myArray = [];

これは、Array.prototypeから継承するオブジェクトを作成したことを意味します。したがって、基本的には、Array.prototypeに格納されているメソッドで拡張されたオブジェクトを処理しています。

myArrayが実際に配列であることを確認するには(そうですね、JavaScriptの配列は疑似配列です)、そのコンストラクターを確認できます。

alert(typeof myArray === 'object' && myArray.constructor === Array);

異なるウィンドウとフレームで構築された配列を識別するより良い方法があります:

alert(Object.prototype.toString.apply(myArray) === '[object Array]');

instanceOfを使用することもできます。

alert(myArray instanceof Array);

またはArray.isArray

alert(Array.isArray(myArray));
7
karim79

JavaScriptでは、連想配列、キー付きコレクション、ハッシュなど、呼び出したいものはすべて特別なタイプではありません。次のすべてが良いです。

a = {}
a[3] = 15
a.b = "c"
a['def'] = 'something'

このコードは、期待するプロパティを持つ単一の有効なオブジェクトを生成します。それらすべて。従来のインデックス付き配列と連想配列を1つのオブジェクトに組み合わせることができます。

束全体を一度に宣言する場合、通常の構文は次のとおりです。

a = {
    'key1' : 'val1',
    'key2' : val2,
    key3 : val3,
    key4 : "val4"
}
4
Marc Thibault