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
Grundsätzlich erstellen Sie ein Objektliteral mit zwei Eigenschaften (aufgerufen key
und value
) und fügen es (using push()
) in das Array ein.
Bearbeiten: Fast 5 Jahre später erhält diese Antwort negative Stimmen, da kein "normales" JS-Objektliteral erstellt wird (auch bekannt als map, aka hash, aka dictionary).
Es wird jedoch die Struktur erstellt, nach der OP gefragt hat (und die in der anderen verknüpften Frage dargestellt ist), bei der es sich um ein Array von Objektliteralen mit key
und value
Eigenschaften handelt. Fragen Sie mich nicht, warum diese Struktur erforderlich war, aber es ist die, nach der gefragt wurde.
Aber, wenn Sie das wollen, was Sie in einem einfachen JS-Objekt wollen - und nicht die Struktur, nach der OP gefragt hat -, lesen Sie die Antwort von tcll , obwohl die Klammernotation etwas umständlich ist, wenn Sie nur einfache Schlüssel haben, die gültige JS-Namen sind. Sie können dies einfach tun:
// object literal with properties
var dict = {
key1: "value1",
key2: "value2"
// etc.
};
Oder verwenden Sie die reguläre Punktnotation, um Eigenschaften nach dem Erstellen eines Objekts festzulegen:
// empty object literal with properties added afterward
var dict = {};
dict.key1 = "value1";
dict.key2 = "value2";
// etc.
Sie tun wollen , die Dirac-Notation , wenn Sie Schlüssel haben , die Leerzeichen in ihnen, Sonderzeichen haben oder solche Sachen. Z.B:
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";
Sie möchten auch eine Klammernotation, wenn Ihre Schlüssel dynamisch sind:
dict[firstName + " " + lastName] = "some value";
Beachten Sie, dass Schlüssel (Eigenschaftsnamen) immer Zeichenfolgen sind und Nicht-Zeichenfolgenwerte bei Verwendung als Schlüssel zu einer Zeichenfolge gezwungen werden. Beispielsweise wird ein Date
Objekt in seine Zeichenfolgendarstellung konvertiert:
dict[new Date] = "today's value";
console.log(dict);
// => {
// "Sat Nov 04 2016 16:15:31 GMT-0700 (PDT)": "today's value"
// }
Beachten Sie jedoch, dass dies nicht unbedingt "nur funktioniert", da viele Objekte eine Zeichenfolgendarstellung haben, "[object Object]"
die keinen nicht eindeutigen Schlüssel ergibt. Seien Sie also vorsichtig bei etwas wie:
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" }
Trotz objA
und objB
völlig unterschiedliche und einzigartige Elemente sein, sie beide haben die gleiche Grund String - Darstellung: "[object Object]"
.
Der Grund Date
dafür ist, dass der Date
Prototyp über eine benutzerdefinierte toString
Methode verfügt, die die Standarddarstellung der Zeichenfolge überschreibt. Und Sie können das Gleiche tun:
// 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"
// }
(Da oben eine Zufallszahl verwendet wird , können Namenskollisionen immer noch sehr leicht auftreten. Dies dient nur zur Veranschaulichung einer Implementierung von toString
.)
Wenn Sie also versuchen, Objekte als Schlüssel zu verwenden, verwendet JS toString
gegebenenfalls die eigene Implementierung des Objekts oder die Standard-Zeichenfolgendarstellung.