var dict = []; // create an empty array
dict.push({
key: "keyName",
value: "the value"
});
// repeat this last part as needed to add more key/value pairs
基本的に、2つのプロパティ(key
およびと呼ばれるvalue
)を持つオブジェクトリテラルを作成し、それを(を使用してpush()
)配列に挿入します。
編集:それで、ほぼ5年後、「通常の」JSオブジェクトリテラル(別名マップ、別名ハッシュ、別名辞書)が作成されないため、この回答は反対票を集めています。れるがOPがを求めた構造を作成する(そしてこれはに連結され、他の質問に示されている)であり、オブジェクトリテラルの配列それぞれと、および特性。なぜその構造が必要だったのかと聞かないでください、しかしそれは求められたものです。
key
value
しかし、しかし、単純なJSオブジェクトで必要なものが-OPが要求する構造ではなく-tcllの答えを参照してください。有効なJS名である単純なキーだけがある場合、ブラケット表記は少し面倒です。あなたはこれを行うことができます:
// object literal with properties
var dict = {
key1: "value1",
key2: "value2"
// etc.
};
または、通常のドット表記を使用して、オブジェクトの作成後にプロパティを設定します。
// empty object literal with properties added afterward
var dict = {};
dict.key1 = "value1";
dict.key2 = "value2";
// etc.
あなたはない、あなたがそれらにスペース、特殊文字、またはそのようなものを持っている鍵を持っている場合はブラケット表記をしたいです。例えば:
var dict = {};
// this obviously won't work
dict.some invalid key (for multiple reasons) = "value1";
// but this will
dict["some invalid key (for multiple reasons)"] = "value1";
キーが動的な場合は、ブラケット表記も必要です。
dict[firstName + " " + lastName] = "some value";
キー(プロパティ名)は常に文字列であり、文字列以外の値はキーとして使用すると文字列に強制変換されます。例えば、Date
オブジェクトはその文字列表現に変換されます:
dict[new Date] = "today's value";
console.log(dict);
// => {
// "Sat Nov 04 2016 16:15:31 GMT-0700 (PDT)": "today's value"
// }
ただし、多くのオブジェクトには文字列表現があり、"[object Object]"
一意でないキーを作成しないため、これは必ずしも「機能しない」ことに注意してください。したがって、次のようなことに注意してください。
var objA = { a: 23 },
objB = { b: 42 };
dict[objA] = "value for objA";
dict[objB] = "value for objB";
console.log(dict);
// => { "[object Object]": "value for objB" }
完全に異なるユニークな要素であるにもかかわらずobjA
、objB
どちらも基本的な文字列表現は同じです"[object Object]"
。
このDate
ように動作しないのは、Date
プロトタイプtoString
にデフォルトの文字列表現をオーバーライドするカスタムメソッドがあるためです。そしてあなたは同じことをすることができます:
// a simple constructor with a toString prototypal method
function Foo() {
this.myRandomNumber = Math.random() * 1000 | 0;
}
Foo.prototype.toString = function () {
return "Foo instance #" + this.myRandomNumber;
};
dict[new Foo] = "some value";
console.log(dict);
// => {
// "Foo instance #712": "some value"
// }
(上記では乱数を使用しているため、名前の衝突が非常に簡単に発生する可能性があります。これは、の実装を説明するためだけのものですtoString
。)
そのため、オブジェクトをキーとして使用しようとすると、JSはオブジェクトの独自のtoString
実装があればそれを使用するか、デフォルトの文字列表現を使用します。