Wie setze ich ein Javascript-Objekt dynamisch?

98

Es ist schwierig, den Fall mit Worten zu erklären. Lassen Sie mich ein Beispiel geben:

var myObj = {
    'name': 'Umut',
    'age' : 34
};

var prop = 'name';
var value = 'Onur';

myObj[name] = value; // This does not work

eval('myObj.' + name) = value;   //Bad coding ;)

Wie kann ich eine variable Eigenschaft mit variablem Wert in einem JavaScript-Objekt festlegen?

Umut KIRGÖZ
quelle
2
Schau genau hin. Anscheinend haben Sie nur vergessen, den Kurscode anzupassen. Es sollte sein myObj[prop] = value;. eval('myObj.'+name)funktioniert auch nicht, da die Variable namenicht existiert.
Felix Kling
7
Sie sollten wirklich mehr varTastaturen zum Deklarieren von Variablen verwenden, mehr Semikolons verwenden, nicht evalmehr Antworten verwenden und akzeptieren. Getan.
Andy
Ihre Frage ist fehlerhaft - das funktioniert , aber Sie haben einen Fehler gemacht. Sie haben " myObj[name]" geschrieben, wenn ich mir ziemlich sicher bin, dass Sie schreiben wollten " myObj[prop]".
Ernest Friedman-Hill

Antworten:

150
myObj[prop] = value;

Das sollte funktionieren. Sie haben den Namen der Variablen und ihren Wert verwechselt. Das Indizieren eines Objekts mit Zeichenfolgen, um seine Eigenschaften zu erhalten, funktioniert in JavaScript jedoch einwandfrei.

Matt Greer
quelle
47
myObj.name=value

oder

myObj['name']=value     (Quotes are required)

Beide sind austauschbar.

Bearbeiten: Ich myObj[prop] = valuevermute, Sie meinten , anstelle von myObj [Name] = Wert. Die zweite Syntax funktioniert einwandfrei: http://jsfiddle.net/waitinforatrain/dNjvb/1/

bcoughlan
quelle
1
Wenn die Objekteigenschaft ein reserviertes Wort ist, ist die zweite Syntax erforderlich.
timw4mail
Dies ist zwar richtig, beantwortet aber seine Frage nicht wirklich. Er fragt sich, was zu tun ist, wenn sich der Eigenschaftsname in einer Variablen befindet.
Ernest Friedman-Hill
Aktualisierte Antwort dort, Sie haben, namewo Sie haben solltenprop
bcoughlan
5

Sie können die Eigenschaft auf die gleiche Weise abrufen, wie Sie sie festgelegt haben.

foo = {
 bar: "value"
}

Sie legen den Wert fest foo["bar"] = "baz";

Um den Wert zu erhalten foo["bar"]

wird "baz" zurückgeben.

timw4mail
quelle
5

Sie können auch etwas erstellen, das einem Wertobjekt (vo) ähnelt.

SomeModelClassNameVO.js;

function SomeModelClassNameVO(name,id) {
    this.name = name;
    this.id = id;
}

Dann kannst du es einfach tun;

   var someModelClassNameVO = new someModelClassNameVO('name',1);
   console.log(someModelClassNameVO.name);
Soner Gönül
quelle
3

Wenn Sie ein Objekt myObjso erstellen, wie Sie es haben, stellen Sie es sich eher wie ein Wörterbuch vor. In diesem Fall hat es zwei Schlüssel name, und age.

Sie können auf zwei Arten auf diese Wörterbücher zugreifen:

  • Wie ein Array (zB myObj[name]); oder
  • Wie eine Eigenschaft (zB myObj.name); Beachten Sie, dass einige Eigenschaften reserviert sind, daher wird die erste Methode bevorzugt.

Sie sollten problemlos als Eigenschaft darauf zugreifen können. Um jedoch als Array darauf zugreifen zu können, müssen Sie den Schlüssel wie eine Zeichenfolge behandeln.

myObj["name"]

Andernfalls geht Javascript davon aus, dass namees sich um eine Variable handelt. Da Sie keine Variable mit dem Namen erstellt haben , kann Javascript namenicht auf den erwarteten Schlüssel zugreifen.

NT3RP
quelle
1
Es gibt immer noch einen Unterschied zwischen myObj[name]und myObj.name, da sich der erstere auf einen Variablennamen und der zweite auf einen Literalschlüssel bezieht.
Pimvdb
0

so einfach ist das myObj.name = value;

Arturo Martinez
quelle