Comment définir dynamiquement les valeurs d'un objet Javascript?


98

Il est difficile d'expliquer le cas par des mots, laissez-moi vous donner un exemple:

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

Comment puis-je définir une propriété variable avec une valeur variable dans un objet JavaScript?



2
Regardez de près. Il semble que vous ayez simplement oublié d'ajuster le code cour. Ça devrait être myObj[prop] = value;. eval('myObj.'+name)ne fonctionne pas non plus car la variable namen'existe pas.
Felix Kling

7
vous devriez vraiment utiliser plus de varclaviers pour déclarer les variables, utiliser plus de points-virgules, ne pas utiliser evalet accepter plus de réponses. Terminé.
jAndy

Votre question est erronée - qui fait le travail, mais vous avez fait une erreur. Vous avez écrit " myObj[name]" alors que je suis sûr que vous vouliez écrire " myObj[prop]".
Ernest Friedman-Hill

Réponses:


151
myObj[prop] = value;

Cela devrait fonctionner. Vous avez confondu le nom de la variable et sa valeur. Mais l'indexation d'un objet avec des chaînes pour obtenir ses propriétés fonctionne bien en JavaScript.


47
myObj.name=value

ou

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

Les deux sont interchangeables.

Edit: Je suppose que vous vouliez dire myObj[prop] = value, au lieu de myObj [nom] = valeur. La deuxième syntaxe fonctionne bien: http://jsfiddle.net/waitinforatrain/dNjvb/1/


1
Si la propriété de l'objet est un mot réservé, la deuxième syntaxe est requise.
timw4mail

Bien que cela soit correct, cela ne répond pas vraiment à sa question; il se demande quoi faire lorsque le nom de la propriété est dans une variable.
Ernest Friedman-Hill

Réponse mise à jour, vous avez namelà où vous devriez avoirprop
bcoughlan

5

Vous pouvez obtenir la propriété de la même manière que vous la définissez.

foo = {
 bar: "value"
}

Vous définissez la valeur foo["bar"] = "baz";

Pour obtenir la valeur foo["bar"]

retournera "baz".


5

Vous pouvez également créer quelque chose qui serait similaire à un objet de valeur (vo);

SomeModelClassNameVO.js;

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

Que vous pouvez simplement faire;

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

3

Lorsque vous créez un objet myObjcomme vous l'avez fait, pensez-y plutôt comme un dictionnaire. Dans ce cas, il possède deux touches name, et age.

Vous pouvez accéder à ces dictionnaires de deux manières:

  • Comme un tableau (par exemple myObj[name]); ou
  • Comme une propriété (par exemple myObj.name); notez que certaines propriétés sont réservées, donc la première méthode est préférée.

Vous devriez pouvoir y accéder en tant que propriété sans aucun problème. Cependant, pour y accéder en tant que tableau, vous devrez traiter la clé comme une chaîne.

myObj["name"]

Sinon, javascript supposera qu'il names'agit d'une variable, et comme vous n'avez pas créé de variable appelée name, il ne pourra pas accéder à la clé que vous attendez.


1
Il y a toujours une différence entre myObj[name]et myObj.namecependant, car le premier fait référence à un nom de variable et le second à une clé littérale.
pimvdb

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.