Hier ist mein Objektliteral:
var obj = {key1: value1, key2: value2};
Wie kann ich Feld hinzufügen key3
mit value3
dem Objekt?
javascript
object-literal
James Skidmore
quelle
quelle
Antworten:
Es gibt zwei Möglichkeiten , einem Objekt neue Eigenschaften hinzuzufügen :
Punktnotation verwenden:
Verwenden der eckigen Klammer:
Das erste Formular wird verwendet, wenn Sie den Namen der Eigenschaft kennen. Die zweite Form wird verwendet, wenn der Name der Eigenschaft dynamisch bestimmt wird. Wie in diesem Beispiel:
Ein echtes JavaScript-Array kann wie folgt erstellt werden:
Die Array-Literal-Notation:
Die Array-Konstruktor-Notation:
quelle
Object.keys({"b": 1, "c": 3, "a": 2}).sort().forEach(console.log);
length
Eigenschaft ist nicht festgelegt, da es sich nicht um ein Array handelt, sondern um ein Objekt / eine Karte / ein Wörterbuch.Antwort für das Jahr 2017:
Object.assign()
Object.assign (dest, src1, src2, ...) führt Objekte zusammen.
Es überschreibt
dest
mit Eigenschaften und Werten von (wie viele) Quellobjekten auch und gibt dann zurückdest
.Live Beispiel
Antwort für das Jahr 2018: Objektverbreitungsoperator
{...}
Von MDN :
Live Beispiel
Es funktioniert in aktuellem Chrome und aktuellem Firefox. Sie sagen, dass es im aktuellen Edge nicht funktioniert.
Antwort Jahr 2019
Objektzuweisungsoperator+=
:Ups ... ich wurde mitgerissen. Der Schmuggel von Informationen aus der Zukunft ist illegal. Ordentlich verdeckt!quelle
const
undlet
stattvar
sollten , dass die 2018 so sein?const
weil es diesen Vorteil beseitigt. Jedes Mal, wenn ich es benutzte, behinderte es die Entwicklung.Year 2019 answer ... Opps ...
Portion verdient ein Dankeschön, Sie haben meinen Tag gemacht . Beste Antwort +1Ich habe LoDash / Underscore beim Schreiben größerer Projekte geliebt .
Hinzufügen von
obj['key']
oderobj.key
sind alle solide reine JavaScript-Antworten. Sowohl die LoDash- als auch die Underscore-Bibliothek bieten jedoch viele zusätzliche praktische Funktionen für die Arbeit mit Objekten und Arrays im Allgemeinen..push()
ist für Arrays , nicht für Objekte .Je nachdem, wonach Sie suchen, gibt es zwei spezifische Funktionen, die möglicherweise nützlich sind und Funktionen bieten, die dem Gefühl von ähneln
arr.push()
. Weitere Informationen finden Sie in den Dokumenten. Dort finden Sie einige gute Beispiele._.merge (nur Lodash)
Das zweite Objekt überschreibt das Basisobjekt oder fügt es hinzu.
undefined
Werte werden nicht kopiert._.extend / _.assign
Das zweite Objekt überschreibt das Basisobjekt oder fügt es hinzu.
undefined
wird kopiert._.defaults
Das zweite Objekt enthält Standardeinstellungen, die dem Basisobjekt hinzugefügt werden, wenn sie nicht vorhanden sind.
undefined
Werte werden kopiert, wenn der Schlüssel bereits vorhanden ist.$ .extend
Darüber hinaus kann es sich lohnen, jQuery.extend zu erwähnen. Es funktioniert ähnlich wie _.merge und ist möglicherweise eine bessere Option, wenn Sie jQuery bereits verwenden.
Das zweite Objekt überschreibt das Basisobjekt oder fügt es hinzu.
undefined
Werte werden nicht kopiert.Object.assign ()
Es kann erwähnenswert sein, das Objekt ES6 / ES2015 Object.assign zu erwähnen. Es funktioniert ähnlich wie _.merge und ist möglicherweise die beste Option, wenn Sie bereits eine ES6 / ES2015-Polyfüllung wie Babel verwenden, wenn Sie sich selbst polyfillen möchten .
Das zweite Objekt überschreibt das Basisobjekt oder fügt es hinzu.
undefined
wird kopiert.quelle
_.extend
ist ein universellerer Alias, da die Unterstrichbibliothek immer nochextend
nicht verwendetmerge
. Ich werde meine Antwort aktualisieren.Sie können eine dieser Optionen verwenden (vorausgesetzt, key3 ist der akute Schlüssel, den Sie verwenden möchten).
oder
Wenn key3 eine Variable ist, sollten Sie Folgendes tun:
Danach
arr.a_key
würde das Anfordern den Wertvalue3
eines Literals zurückgeben3
.quelle
weil dein arr nicht wirklich ein Array ist ... Es ist ein Prototyp-Objekt. Das reale Array wäre:
aber es ist immer noch nicht richtig. Es sollte eigentlich sein:
quelle
quelle
Einfach Eigenschaften hinzufügen:
Und wir möchten
prop2 : 2
diesem Objekt hinzufügen , dies sind die bequemsten Optionen:object.prop2 = 2;
object['prop2'] = 2;
Welches verwenden wir dann?
Der Punktoperator hat eine sauberere Syntax und sollte als Standard (imo) verwendet werden. Der Punktoperator ist jedoch nicht in der Lage, einem Objekt dynamische Schlüssel hinzuzufügen, was in einigen Fällen sehr nützlich sein kann. Hier ist ein Beispiel:
Objekte zusammenführen:
Wenn wir die Eigenschaften von 2 Objekten zusammenführen möchten, sind dies die bequemsten Optionen:
Object.assign()
, nimmt ein Zielobjekt als Argument und ein oder mehrere Quellobjekte und führt sie zusammen. Zum Beispiel:...
Welches verwenden wir?
Object.assign()
ist dynamischer, da wir Zugriff auf alle Objekte haben, die als Argumente übergeben werden, und diese bearbeiten können, bevor sie dem neuen Objekt zugewiesen werden.quelle
Ich weiß, dass es dafür bereits eine akzeptierte Antwort gibt, aber ich dachte, ich würde meine Idee irgendwo dokumentieren. Bitte [Leute] fühlen sich frei, Löcher in diese Idee zu stechen, da ich nicht sicher bin, ob es die beste Lösung ist ... aber ich habe dies erst vor ein paar Minuten zusammengestellt:
Sie würden es folgendermaßen nutzen:
Da die Prototypfunktion zurückkehrt
this
, können Sie die Ketten.push
bis zum Ende Ihrerobj
Variablen fortsetzen:obj.push(...).push(...).push(...);
Eine weitere Funktion besteht darin, dass Sie ein Array oder ein anderes Objekt als Wert in den Push-Funktionsargumenten übergeben können. Ein funktionierendes Beispiel finden Sie in meiner Geige: http://jsfiddle.net/7tEme/
quelle
TypeError: 'undefined' is not a function (evaluating 'U[a].exec(s)')
was seltsam ist, weil es in jsfiddle sogar mit jquery1.9 funktioniertPerformance
Heute 2020.01.14 führe ich Tests für MacOs HighSierra 10.13.6 unter Chrome v78.0.0, Safari v13.0.4 und Firefox v71.0.0 für ausgewählte Lösungen durch. Ich teile Lösungen in veränderlich (erster Buchstabe M) und unveränderlich (erster Buchstabe I). Ich biete auch einige unveränderliche Lösungen (IB, IC, ID / IE) an, die noch nicht in Antworten auf diese Frage veröffentlicht wurden
Schlussfolgerungen
obj.key3 = "abc"
(MA, MB) ist am schnellsten{...obj, key3:'abc'}
undObject.assign
(IA, IB) am schnellstenEinzelheiten
In Snippet dort getesteten Lösung presended sind, können Sie Test auf Ihrem Rechner prefrom HIER
Code-Snippet anzeigen
quelle
Sie können eine Klasse mit der Antwort von @ Ionuț G. Stan erstellen
Erstellen eines neuen Objekts mit der letzten Klasse:
Objekt drucken
Schlüssel drucken
Ich bin ein Neuling in Javascript, Kommentare sind willkommen. Funktioniert bei mir.
quelle
Zwei am häufigsten verwendete Methoden, die bereits in den meisten Antworten erwähnt wurden
Eine weitere Möglichkeit, eine Eigenschaft zu definieren, ist die Verwendung von Object.defineProperty ()
Diese Methode ist nützlich, wenn Sie beim Definieren von Eigenschaften mehr Kontrolle haben möchten. Die definierte Eigenschaft kann vom Benutzer als aufzählbar, konfigurierbar und beschreibbar festgelegt werden.
quelle
Ihr Beispiel zeigt ein Objekt, kein Array. In diesem Fall besteht die bevorzugte Möglichkeit, einem Objekt ein Feld hinzuzufügen, darin, es einfach wie folgt zuzuweisen:
quelle
Wird von den meisten Browsern unterstützt und prüft, ob ein Objektschlüssel verfügbar ist oder nicht, den Sie hinzufügen möchten. Wenn verfügbar , überschreibt er den vorhandenen Schlüsselwert und ist nicht verfügbar. Es wird ein Schlüssel mit Wert hinzugefügt
Beispiel 1
Beispiel 2
Beispiel 3
quelle
Wenn Sie mehrere anonyme Objektliterale in einem Objekt haben und ein weiteres Objekt mit Schlüssel / Wert-Paaren hinzufügen möchten, gehen Sie folgendermaßen vor:
Firebug 'das Objekt:
kehrt zurück:
Code:
wird
Object {name="Peanuts", value="12"}
dem Comicbook-Objekt hinzugefügtquelle
Entweder
obj['key3'] = value3
oderobj.key3 = value3
wird das neue Paar zum hinzufügenobj
.Ich weiß jedoch, dass jQuery nicht erwähnt wurde, aber wenn Sie es verwenden, können Sie das Objekt durch hinzufügen
$.extend(obj,{key3: 'value3'})
. Z.B:jQuery. verlängern (Ziel [, Objekt1] [, ObjektN]) den Inhalt von zwei oder mehr Objekten zusammen zum ersten Objekt.
Außerdem können rekursive Ergänzungen / Änderungen vorgenommen werden mit
$.extend(true,object1,object2);
:Code-Snippet anzeigen
quelle
Ein kurzer und eleganter Weg in der nächsten Javascript-Spezifikation (Kandidatenstufe 3) ist:
obj = { ... obj, ... { key3 : value3 } }
Eine ausführlichere Diskussion finden Sie in Object Spread vs Object.assign und auf der Website von Dr. Axel Rauschmayers .
Es funktioniert bereits in node.js seit Release 8.6.0.
Vivaldi, Chrome, Opera und Firefox in aktuellen Versionen kennen diese Funktion ebenfalls, Mirosoft jedoch bis heute weder im Internet Explorer noch in Edge.
quelle
Ausgabe wie folgt: -
quelle
Sie können es entweder folgendermaßen hinzufügen:
oder so:
Die Antworten, die vorschlagen, mit der Variablen in das Objekt einzugeben
key3
, funktionieren nur, wenn der Wert vonkey3
war'key3'
.quelle
Gemäß den in ECMA-262 ( http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf) definierten Property Accessors , P67) gibt es zwei Möglichkeiten, Eigenschaften hinzuzufügen ein existierendes Objekt. Alle diese beiden Möglichkeiten werden von der Javascript-Engine gleich behandelt.
Der erste Weg ist die Verwendung der Punktnotation:
Auf diese Weise sollten Sie nach der Punktnotation einen IdentifierName verwenden.
Die zweite Möglichkeit ist die Verwendung der Klammernotation:
und eine andere Form:
Auf diese Weise können Sie einen Ausdruck (einschließlich IdentifierName ) in der Klammernotation verwenden.
quelle
Das können wir auch so machen.
quelle
Da ist es eine Frage der Vergangenheit, aber das Problem der Gegenwart. Würde eine weitere Lösung vorschlagen: Übergeben Sie einfach den Schlüssel und die Werte an die Funktion und Sie erhalten ein Kartenobjekt.
quelle
Um einem Objekt ein Schlüssel-Wert-Paar voranzustellen, damit das for in mit diesem Element funktioniert, gehen Sie zunächst folgendermaßen vor:
quelle
Der beste Weg, dies zu erreichen, ist unten angegeben:
quelle
Sie können ein neues Objekt mithilfe der folgenden
{[key]: value}
Syntax erstellen :Mit der vorherigen Syntax können Sie jetzt die Spread-Syntax verwenden
{...foo, ...bar}
, um ein neues Objekt hinzuzufügen, ohne Ihren alten Wert zu ändern:quelle