web-dev-qa-db-ja.com

Javascriptリテラル表記で連想配列を作成する方法

javascriptにはassociative arraysはなく、objectsのみが存在することを理解しています。

ただし、次のようにbracket notationを使用して、文字列キーでarrayを作成できます。

var myArray = [];
myArray['a'] = 200; 
myArray['b'] = 300; 
console.log(myArray); //prints [a: 200, b: 300]

だから、bracket notationを使用せずにまったく同じことをしたい

var myNewArray = [a: 200, b: 300]; //getting error - Unexpected token:

これも機能しません

var myNewArray = ['a': 200, 'b': 300]; //same error, why can I not create?
26
Wild Widow

JavaScriptには連想配列はなく、オブジェクトだけがあります。 JavaScriptの配列でさえ基本的に単なるオブジェクトであり、プロパティ名が数字(0,1、...)であるという特別なことだけがあります。

最初にコードを見てください:

var myArray = []; // creating a new array object
myArray['a'] = 200; // setting the attribute a to 200
myArray['b'] = 300; // setting the attribute b to 300

myArray['a'] = 200;同一myArray.a = 200;であることを理解することが重要です!

だからあなたが欲しいものから始めるために:あなたはjavascript配列を作成することはできず、1つのステートメントでそれに数値属性を渡すことはできません。

しかし、これはおそらくあなたが必要とするものではありません!おそらく、JSオブジェクトが必要なだけです。これは、他の言語の連想配列、辞書、またはマップと基本的に同じものです。文字列を値にマップします。そして、それは簡単に行うことができます:

var myObj = {a: 200, b: 300};

しかし、これはあなたがやったこととわずかに異なることを理解することが重要です。 myObj instanceof Arrayは、falseがプロトタイプチェーンのmyObjの祖先ではないため、Arrayを返します。

36
Lux

マップを使用できます:

var arr = new Map([ 
   ['key1', 'User'], 
   ['key2', 'Guest'], 
   ['key3', 'Admin'], 
]);
var res = arr.get('key2');  
console.log(res); // The value is 'Guest'
11
Santo Boldižar

この場合、オブジェクトを使用したい

var myObject = {'a' : 200, 'b' : 300 };

この回答は、より詳細な説明にリンクしています: JavaScriptで連想配列/ハッシュを行う方法http://blog.xkoder.com/2008/07/10/javascript- associative-arrays-demystified /

2
httpNick

さて、実際にはオブジェクトである配列を作成しています。

var arr = [];
arr.map;
// function(..)
arr['map'];
// function(..)

arr['a'] = 5;

console.log(arr instanceof Object); // true

arrにフィールドと関数を追加できます。ただし、それらは配列に「挿入」されません(arr.Push(...)など)

[]構文でオブジェクトフィールドを参照できます。

2
galchen

配列とオブジェクトは別のものです。

オブジェクトの場合、次のようなことができます。

var obj = { "property1": "value1" };
obj.property2 = "value2";

配列の場合、これを行う必要があります。

var arr = [];
arr[0] = "value";
1
developius