Von der Post:
Senden eines JSON-Arrays zum Empfang als Dictionary <string, string>
Ich versuche das Gleiche wie dieser Beitrag zu tun. Das einzige Problem ist, dass ich nicht weiß, was die Schlüssel und die Werte im Voraus sind. Ich muss also in der Lage sein, die Schlüssel- und Wertepaare dynamisch hinzuzufügen, und ich weiß nicht, wie das geht.
Weiß jemand, wie man dieses Objekt erstellt und Schlüsselwertpaare dynamisch hinzufügt?
Ich habe es versucht:
var vars = [{key:"key", value:"value"}];
vars[0].key = "newkey";
vars[0].value = "newvalue";
Das geht aber nicht
javascript
dictionary
key-value
KenEucker
quelle
quelle
list = [["key1","value1"],["key2","value2"]]
. Einige andere Sprachen haben den Typ "Paar" oder "Tupel". tldr für das tatsächliche Diktat hinzufügen:dict['key'] = "value"
Antworten:
Grundsätzlich erstellen Sie ein Objektliteral mit zwei Eigenschaften (aufgerufen
key
undvalue
) und fügen es (usingpush()
) 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
undvalue
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:
Oder verwenden Sie die reguläre Punktnotation, um Eigenschaften nach dem Erstellen eines Objekts festzulegen:
Sie tun wollen , die Dirac-Notation , wenn Sie Schlüssel haben , die Leerzeichen in ihnen, Sonderzeichen haben oder solche Sachen. Z.B:
Sie möchten auch eine Klammernotation, wenn Ihre Schlüssel dynamisch sind:
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: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:Trotz
objA
undobjB
völlig unterschiedliche und einzigartige Elemente sein, sie beide haben die gleiche Grund String - Darstellung:"[object Object]"
.Der Grund
Date
dafür ist, dass derDate
Prototyp über eine benutzerdefiniertetoString
Methode verfügt, die die Standarddarstellung der Zeichenfolge überschreibt. Und Sie können das Gleiche tun:(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.quelle
dict
ist kein assoziatives Wörterbuch. Es ist ein Array von Objekten, von denen jedes ein bisschen wie ein Wörterbuch mit zwei Schlüsseln ist: "Schlüssel" und "Wert".funktioniert genauso wie Python :)
Konsolenausgabe:
quelle
{}
anstatt Klammern zu initialisierenEs ist so einfach wie:
oder
dann
quelle
Da Sie angegeben haben, dass Sie ein Wörterbuchobjekt möchten (und kein Array, von dem ich annehme, dass einige es verstanden haben), denke ich, dass Sie danach suchen :
quelle
JavaScript
Object
ist an sich wie ein Wörterbuch. Das Rad muss nicht neu erfunden werden.Geige
quelle
Sie können Karten
Map
wie folgt verwenden:quelle
Ich bin zufällig auf diese Frage gestoßen und habe nach etwas Ähnlichem gesucht. Es gab mir genug Informationen, um einen Test durchzuführen, um die gewünschte Antwort zu erhalten. Wenn also jemand anderes wissen möchte, wie man ein {key: 'value'} -Paar in einem JavaScript-Objekt dynamisch hinzufügt oder nachschlägt, sollte dieser Test Ihnen alles sagen, was Sie möglicherweise wissen müssen.
Ausgabe
quelle
quelle
key1 = dictionary.key1
eher referenzieren als indexierenkey1 = dictionary["key1"]
Sie können ein Klassenwörterbuch erstellen, um problemlos mit der Wörterbuchliste zu interagieren:
quelle
Wie wäre es mit dem einen Liner zum Erstellen eines Schlüsselwertpaars?
und einige Iteratorfunktionen
reduce
konvertieren gerne ein Array dynamisch in ein Wörterbuchquelle
In modernem Javascript (ES6 / ES2015) sollte die Kartendatenstruktur für das Wörterbuch verwendet werden. In der Map-Datenstruktur in ES6 können Sie beliebige Werte als Schlüssel verwenden.
Wenn Sie noch ES5 verwenden, besteht die richtige Methode zum Erstellen eines Wörterbuchs darin, ein Objekt ohne Prototyp auf folgende Weise zu erstellen.
Das Erstellen eines Wörterbuchs ohne Prototypobjekt bietet viele Vorteile. Die folgenden Blogs sind zu diesem Thema lesenswert.
Diktatmuster
Objekte als Karten
quelle
Es würde einer Menge helfen zu wissen, was Ihr gewünschtes Endergebnis ist, aber ich denke, das ist, was Sie wollen:
quelle
Ich bin auf dieses Problem gestoßen .. aber innerhalb einer for-Schleife. Die Top-Lösung funktionierte nicht (wenn Variablen (und keine Zeichenfolgen) für die Parameter der Push-Funktion verwendet wurden), und die anderen berücksichtigten keine auf Variablen basierenden Schlüsselwerte. Ich war überrascht, dass dieser Ansatz (der in PHP üblich ist) funktioniert hat.
quelle
Eine Verbesserung
var dict = {}
ist zu verwendenvar dict = Object.create(null)
.Dadurch wird ein leeres Objekt erstellen , die sie nicht haben ,
Object.prototype
wie es den Prototyp.quelle
quelle