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?



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.


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/


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.


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);

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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.