In JavaScript habe ich ein Objekt wie folgt erstellt:
var data = {
'PropertyA': 1,
'PropertyB': 2,
'PropertyC': 3
};
Ist es möglich, diesem Objekt nach seiner ersten Erstellung weitere Eigenschaften hinzuzufügen, wenn der Name der Eigenschaft erst zur Laufzeit festgelegt wird? dh
var propName = 'Property' + someUserInput
//imagine someUserInput was 'Z', how can I now add a 'PropertyZ' property to
//my object?
javascript
Lee D.
quelle
quelle
object["property"]
ist dies nicht genau das Gleiche wiearray[4]
, das erstere wurde nicht als echtes Array erstellt.data["PropertyD"]
zu gehendata[function_to_get_property_name()]
scheint trivial.ES6 für den Sieg!
Wenn Sie sich anmelden, erhalten
data
Sie Folgendes:Dies nutzt die neue Syntax für berechnete Eigenschaften und Vorlagenliterale .
quelle
obj[propname]
). Stattdessen konnte ich dies mit der Objektverbreitungssyntax verwenden.var a = {}; a["dynamic-" + prop] = true;
a
. (Speziell bei Verwendung von Paketen wie Redux)Ja, es ist möglich. Angenommen:
Entweder:
oder
Die erste Methode ist bevorzugt. eval () hat die offensichtlichen Sicherheitsbedenken, wenn Sie vom Benutzer bereitgestellte Werte verwenden. Verwenden Sie sie daher nicht, wenn Sie sie vermeiden können, aber es lohnt sich zu wissen, dass sie vorhanden sind und was sie tun können.
Sie können dies referenzieren mit:
oder
oder
quelle
$("#mySelector").data("propertyname", myvalue);
zu setzen undvar myValue=$("#mySelector").data("propertyname");
den Wert zurückzubekommen. Auf diese Weise können auch komplexe Objekte (Listen, Arrays ...) hinzugefügt werden.Ich weiß, dass die Frage perfekt beantwortet ist, aber ich habe auch einen anderen Weg gefunden, um neue Eigenschaften hinzuzufügen, und wollte sie mit Ihnen teilen:
Sie können die Funktion verwenden
Object.defineProperty()
Gefunden im Mozilla Developer Network
Beispiel:
quelle
defineProperties
(Plural) hinzuzufügen .Object.defineProperty
soll nicht das einfache Komfortwerkzeug sein, sondern das mit der feinkörnigen Steuerung. Wenn Sie diese zusätzliche Steuerung nicht benötigen, ist sie nicht das richtige Werkzeug.Object.defineProperty(obj, prop, valueDescriptor)
ist für V8 viel langsamer und schwieriger zu optimieren als nur zu tunobj[prop] = value
;ES6 führt berechnete Eigenschaftsnamen ein, mit denen Sie dies tun können
quelle
Hier mit Ihrer Notation:
quelle
Sie können beliebig viele Eigenschaften hinzufügen, indem Sie einfach die Punktnotation verwenden:
oder :
für dynamische Tasten.
quelle
Zusätzlich zu allen vorherigen Antworten und für den Fall, dass Sie sich fragen, wie wir in Zukunft dynamische Eigenschaftsnamen mithilfe von berechneten Eigenschaftsnamen (ECMAScript 6) schreiben werden, gehen Sie wie folgt vor:
Referenz: ECMAScript 6 verstehen - Nickolas Zakas
quelle
Nur eine Ergänzung zu Abes Antwort oben. Sie können eine Funktion definieren, um die Komplexität von defineProperty wie unten beschrieben zu kapseln.
Referenz: http://addyosmani.com/resources/essentialjsdesignpatterns/book/#constructorpatternjavascript
quelle
Sie können Eigenschaften dynamisch hinzufügen, indem Sie einige der folgenden Optionen verwenden:
In Ihrem Beispiel:
Sie können eine Eigenschaft mit einem dynamischen Wert auf die folgenden zwei Arten definieren:
oder
Noch mehr ... Wenn Ihr Schlüssel auch dynamisch ist, können Sie ihn mithilfe der Object-Klasse definieren mit:
Wenn Daten Ihr Objekt sind, ist der Schlüssel die Variable zum Speichern des Schlüsselnamens und der Wert die Variable zum Speichern des Werts.
Ich hoffe das hilft!
quelle
Ich weiß, dass es bereits mehrere Antworten auf diesen Beitrag gibt, aber ich habe keine gesehen, bei der es mehrere Eigenschaften gibt und die sich in einem Array befinden. Und diese Lösung ist übrigens für ES6.
Nehmen wir zur Veranschaulichung an, wir haben ein Array mit dem Namen person mit Objekten darin:
Sie können also eine Eigenschaft mit dem entsprechenden Wert hinzufügen. Angenommen, wir möchten eine Sprache mit dem Standardwert EN hinzufügen .
Das Personenarray würde nun folgendermaßen aussehen:
quelle
Person = Person.map(code here)
. Der Punkt ist jedoch, dass Sie einem vorhandenen Objekt auf einfache Weise Eigenschaften hinzufügen könnenES6
.Der einfachste und tragbarste Weg ist.
Basierend auf #abeing Antwort!
quelle
Seien Sie vorsichtig, wenn Sie dem vorhandenen Objekt mit der Methode. (Punkt) eine Eigenschaft hinzufügen .
(DOT) Methode eine Eigenschaft zum Objekt der Zugabe sollte nur verwendet werden , wenn Sie wissen , den ‚Schlüssel‘ im Voraus ansonsten verwenden Sie die [Konsole] Methode.
Beispiel:
Beachten Sie das Problem am Ende des Konsolenprotokolls - 'key: 1999' anstelle von Property6: 6, Property7: 7, ........., Property1999: 1999 . Der beste Weg, dynamisch erstellte Eigenschaften hinzuzufügen, ist die [Klammer] -Methode.
quelle
Eine gute Möglichkeit, über dynamische Zeichenfolgennamen zuzugreifen, die Objekte enthalten (z. B. object.subobject.property).
Beispiel:
eval funktioniert für den Lesewert, aber der Schreibwert ist etwas schwieriger.
Eine erweiterte Version (Erstellen Sie Unterklassen, wenn diese nicht vorhanden sind, und lassen Sie Objekte anstelle globaler Variablen zu.)
Beispiel:
Dies ist das gleiche wie o.object.subobject.property
quelle
So habe ich das Problem gelöst.
Erzeugt das folgende Objekt:
quelle
Es kann nützlich sein, wenn gemischte neue Eigenschaften zur Laufzeit hinzugefügt werden:
Der Spread-Operator verwendet jedoch eine flache Kopie, aber hier weisen wir uns selbst Daten zu, damit nichts verloren geht
quelle
Ein perfekter einfacher Weg
Wenn Sie es auf ein Datenarray anwenden möchten (ES6 / TS-Version)
quelle
Bestimmt. Stellen Sie sich das als Wörterbuch oder assoziatives Array vor. Sie können es jederzeit hinzufügen.
quelle