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?

Umut KIRGÖZ
la source
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.

Matt Greer
la source
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/

bcoughlan
la source
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".

timw4mail
la source
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);
Soner Gönül
la source
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.

NT3RP
la source
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
0

aussi simple que ça myObj.name = value;

Arturo Martinez
la source