Come impostare dinamicamente i valori di un oggetto Javascript?


98

È difficile spiegare il caso a parole, lasciatemi fare un esempio:

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

Come posso impostare una proprietà variabile con valore variabile in un oggetto JavaScript?



2
Dai un'occhiata da vicino. Sembra che tu abbia appena dimenticato di modificare il codice Cour. Dovrebbe essere myObj[prop] = value;. eval('myObj.'+name)non funziona neanche in quanto la variabile namenon esiste.
Felix Kling

7
dovresti davvero usare più vartastiere per dichiarare le variabili, usare più punti e virgola, non usare evale accettare più risposte. Fatto.
jAndy

La tua domanda è viziata - che fa il lavoro, ma ha fatto un errore. Hai scritto " myObj[name]" quando sono abbastanza sicuro che volevi scrivere " myObj[prop]".
Ernest Friedman-Hill

Risposte:


151
myObj[prop] = value;

Dovrebbe funzionare. Hai confuso il nome della variabile e il suo valore. Ma l'indicizzazione di un oggetto con stringhe per ottenere le sue proprietà funziona bene in JavaScript.


47
myObj.name=value

o

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

Entrambi sono intercambiabili.

Modifica: immagino che volevi dire myObj[prop] = value, invece di myObj [nome] = valore. La seconda sintassi funziona bene: http://jsfiddle.net/waitinforatrain/dNjvb/1/


1
Se la proprietà dell'oggetto è una parola riservata, è richiesta la seconda sintassi.
timw4mail

Anche se questo è corretto, in realtà non risponde alla sua domanda; si chiede cosa fare quando il nome della proprietà è in una variabile.
Ernest Friedman-Hill

Risposta aggiornata lì, hai namedove dovresti avereprop
bcoughlan

5

È possibile ottenere la proprietà nello stesso modo in cui è stata impostata.

foo = {
 bar: "value"
}

Hai impostato il valore foo["bar"] = "baz";

Per ottenere il valore foo["bar"]

restituirà "baz".


5

Potresti anche creare qualcosa che sia simile a un oggetto valore (vo);

SomeModelClassNameVO.js;

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

Di quello che puoi fare;

   var someModelClassNameVO = new someModelClassNameVO('name',1);
   console.log(someModelClassNameVO.name);

3

Quando crei un oggetto myObjcome hai, pensalo più come un dizionario. In questo caso, ha due chiavi name, e age.

Puoi accedere a questi dizionari in due modi:

  • Come un array (ad esempio myObj[name]); o
  • Come una proprietà (ad esempio myObj.name); si noti che alcune proprietà sono riservate, quindi il primo metodo è preferito.

Dovresti essere in grado di accedervi come proprietà senza problemi. Tuttavia, per accedervi come un array, è necessario trattare la chiave come una stringa.

myObj["name"]

Altrimenti, javascript presumerà che namesia una variabile e, poiché non hai creato una variabile chiamata name, non sarà in grado di accedere alla chiave che ti aspetti.


1
C'è ancora una differenza tra myObj[name]e myObj.namesebbene, perché il primo si riferisce a un nome di variabile e il secondo a una chiave letterale.
pimvdb

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.