web-dev-qa-db-fra.com

Comment créer une propriété d'objet à partir d'une valeur de variable en JavaScript?

Je veux ajouter une nouvelle propriété à 'myObj', la nommer 'chaîne1' et lui donner la valeur 'chaîne2', mais lorsque je le fais, elle renvoie 'indéfini:

var myObj = new Object;
var a = 'string1';
var b = 'string2';
myObj.a = b;

alert(myObj.string1); //Returns 'undefined'
alert(myObj.a); //Returns 'string2'

En d'autres termes: comment créer une propriété d'objet et lui donner le nom stocké dans la variable, mais pas le nom de la variable elle-même?

315
ecu
409
philfreo

ES6 introduit les noms de propriété calculés, qui vous permettent de faire

var myObj = {[a]: b};

Notez que la prise en charge du navigateur est actuellement négligeable.

303
Oriol

La notation par points et les propriétés sont équivalentes. Donc, vous accomplissez comme ceci:

var myObj = new Object;
var a = 'string1';
myObj[a] = 'whatever';
alert(myObj.string1)

(alerte "peu importe")

74
cgp

Ecu, si vous faites myObj.a, alors il cherchera la propriété nommée a de myObj. Si vous faites myObj[a] =b, alors il cherchera la propriété a.valueOf() de myObj.

9
user286806

Bon mot:

obj = (function(attr, val){ var a = {}; a[attr]=val; return a; })('hash', 5);

Ou:

attr = 'hash';
val = 5;
var obj = (obj={}, obj[attr]=val, obj);

Quelque chose de plus court?

7
user2846569

Vous pouvez simplement utiliser ceci:

function createObject(propName, propValue){
    this[propName] = propValue;
}
var myObj1 = new createObject('string1','string2');

Tout ce que vous transmettez comme premier paramètre sera le nom de la propriété, et le second paramètre sera la valeur de la propriété.

4
Aaron George

Comme $ scope est un objet, vous pouvez essayer avec JavaScript en:

$scope['something'] = 'hey'

C'est égal à:

$scope.something = 'hey'

J'ai créé un violon à tester .

3
Tuan

Vous ne pouvez pas utiliser une variable pour accéder à une propriété via la notation par points, mais utilisez plutôt la notation tableau.

var obj= {
     'name' : 'jroi'
};
var a = 'name';
alert(obj.a); //will not work
alert(obj[a]); //should work and alert jroi'
2
jroi_web

Ce qui suit illustre une approche alternative pour renvoyer un objet paire de clés en utilisant la forme (a, b). Le premier exemple utilise la chaîne 'key' comme nom de propriété et 'val' comme valeur.

Exemple # 1:

(function(o,a,b){return o[a]=b,o})({},'key','val');

Exemple: # 2:

var obj = { foo: 'bar' };
(function(o,a,b){return o[a]=b,o})(obj,'key','val');

Comme indiqué dans le deuxième exemple, cela peut également modifier des objets existants (si la propriété est déjà définie dans l'objet, la valeur sera remplacée) .

Résultat 1: { key: 'val' }

Résultat n ° 2: { foo: 'bar', key: 'val' }

0
Trent