951 Stimmen

Ist es möglich, dynamisch benannte Eigenschaften zu JavaScript-Objekten hinzuzufügen?

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 Eigenschaften erst zur Laufzeit festgelegt wird? d.h.

var propName = 'Property' + someUserInput
//imagine someUserInput was 'Z', how can I now add a 'PropertyZ' property to 
//my object?

0 Stimmen

Die Verwendung von Benutzereingaben zur Manipulation von Schlüsseln in Datenstrukturen ist bestenfalls ein Antipattern und schlimmstenfalls ein Sicherheitsrisiko. Was sind Sie wirklich zu erreichen versuchen indem Sie dies tun?

24voto

Maxim Sloyko Punkte 13995

Hier, unter Verwendung Ihrer Notation:

var data = {
    'PropertyA': 1,
    'PropertyB': 2,
    'PropertyC': 3
};
var propName = 'Property' + someUserInput
//imagine someUserInput was 'Z', how can I now add a 'PropertyZ' property to 
//my object?
data[propName] = 'Some New Property value'

22voto

Gabriel Hurley Punkte 38778

Sie können beliebig viele weitere Eigenschaften hinzufügen, indem Sie einfach die Punktschreibweise verwenden:

var data = {
    var1:'somevalue'
}
data.newAttribute = 'newvalue'

ou :

data[newattribute] = somevalue

für dynamische Schlüssel.

20voto

Anas Nakawa Punkte 1887

Zusätzlich zu allen vorherigen Antworten, und falls Sie sich fragen, wie wir dynamische Eigenschaftsnamen in der Zukunft unter Verwendung von berechneten Eigenschaftsnamen ( ECMAScript 6 ), hier ist die Vorgehensweise:

var person = "John Doe";
var personId = "person_" + new Date().getTime();
var personIndex = {
    [ personId ]: person
//  ^ computed property name
};

personIndex[ personId ]; // "John Doe"

Hinweis: ECMAScript 6 verstehen - Nickolas Zakas

16voto

Sarvesh Punkte 607

Nur eine Ergänzung zur obigen Antwort von abeing. Sie können eine Funktion definieren, um die Komplexität von defineProperty wie unten erwähnt zu kapseln.

var defineProp = function ( obj, key, value ){
  var config = {
    value: value,
    writable: true,
    enumerable: true,
    configurable: true
  };
  Object.defineProperty( obj, key, config );
};

//Call the method to add properties to any object
defineProp( data, "PropertyA",  1 );
defineProp( data, "PropertyB",  2 );
defineProp( data, "PropertyC",  3 );

Hinweis: http://addyosmani.com/resources/essentialjsdesignpatterns/book/#constructorpatternjavascript

14voto

Fabricio Punkte 3130

Sie können Eigenschaften dynamisch hinzufügen, indem Sie einige der unten aufgeführten Optionen verwenden:

In Ihrem Beispiel:

var data = {
    'PropertyA': 1,
    'PropertyB': 2,
    'PropertyC': 3
};

Sie können eine Eigenschaft mit einem dynamischen Wert auf die folgenden beiden Arten definieren:

data.key = value;

ou

data['key'] = value;

Noch mehr..wenn Ihr Schlüssel auch dynamisch ist, können Sie mit der Klasse Object definieren:

Object.defineProperty(data, key, withValue(value));

Daten ist Ihr Objekt, Schlüssel ist die Variable zum Speichern des Schlüsselnamens und Wert ist die Variable, in der der Wert gespeichert wird.

Ich hoffe, das hilft!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X