JavaScriptオブジェクトを作成する一般的な方法は次のとおりです。
var map = new Object();
map[myKey1] = myObj1;
map[myKey2] = myObj2;
キーと値の両方が文字列であるようなマップを作成する必要があります。マップに追加するペアの大きいが静的なセットがあります。
Javascriptでこのようなことを実行する方法はありますか?
var map = { { "aaa", "rrr" }, { "bbb", "ppp" } ... };
または、各エントリに対して次のようなことを実行する必要がありますか?
map["aaa"]="rrr";
map["bbb"]="ppp";
...
基本的に、残りのJavascriptコードはこのマップをループ処理し、「実行時」に既知の基準に従って値を抽出します。このループジョブに適したデータ構造があれば、私も興味があります。私の目的はコードを最小限にすることです。
JavaScriptのオブジェクトリテラル構文。通常、オブジェクトのインスタンス化に使用されます(真剣に、誰もnew Object
またはnew Array
)、 以下のとおりであります:
var obj = {
'key': 'value',
'another key': 'another value',
anUnquotedKey: 'more value!'
};
配列の場合:
var arr = [
'value',
'another value',
'even more values'
];
オブジェクト内にオブジェクトが必要な場合も、それで問題ありません。
var obj = {
'subObject': {
'key': 'value'
},
'another object': {
'some key': 'some value',
'another key': 'another value',
'an array': [ 'this', 'is', 'ok', 'as', 'well' ]
}
}
静的データをインスタンス化できるこの便利な方法は、 JSONデータ形式 につながったものです。
JSONはもう少しうるさく、キーは文字列値と同様に二重引用符で囲む必要があります。
{"foo":"bar", "keyWithIntegerValue":123}
ES2015 a.k.a ES6バージョンのJavaScriptでは、Map
という新しいデータ型が導入されています。
let map = new Map([["key1", "value1"], ["key2", "value2"]]);
map.get("key1"); // => value1
このリファレンス で詳細を確認してください。
オブジェクトリテラル表記で問題なく動作します。
var map = { key : { "aaa", "rrr" },
key2: { "bbb", "ppp" } // trailing comma leads to syntax error in IE!
}
ところで、配列をインスタンス化する一般的な方法
var array = [];
// directly with values:
var array = [ "val1", "val2", 3 /*numbers may be unquoted*/, 5, "val5" ];
およびオブジェクト
var object = {};
また、次のいずれかを実行できます。
obj.property // this is prefered but you can also do
obj["property"] // this is the way to go when you have the keyname stored in a var
var key = "property";
obj[key] // is the same like obj.property
これを試してください:
var map = {"aaa": "rrr", "bbb": "ppp"};
最初に書いた構文は無効です。以下を使用して何かを達成できます。
var map = {"aaa": "rrr", "bbb": "ppp" /* etc */ };