web-dev-qa-db-fra.com

Comment interpoler une variable en tant que clé dans un objet JavaScript?

Comment utiliser la valeur de la variable a comme clé pour rechercher une propriété? Je veux pouvoir dire: b["whatever"] et avoir ce retour 20:

var a = "whatever";
var b = {a : 20};     // Want this to assign b.whatever
alert(b["whatever"]); // so that this shows 20, not `undefined`

Je demande s'il est possible, lors de la création de b, de le contenir "whatever":20 au lieu de a:20 où "quel que soit" est lui-même dans une variable. Peut-être qu'une eval pourrait être utilisée?

35
Geo
var a = "whatever";
var b = {};
b[a] = 20;
alert(b["whatever"]); // shows 20
45
mVChr

Cela fonctionne dans Firefox 39 et Chrome 44. Je ne connais pas les autres navigateurs. De plus, cela ne fonctionne pas dans nodejs v0.12.7.

var a = "whatever";
var b = { [a]: 20 };
console.log(b["whatever"]); // shows 20

Autrement dit, pour interpoler une variable, mettez-la entre parenthèses.

Je ne sais pas si cela fait partie d'une norme. À l'origine, j'ai vu cette syntaxe ici: https://hacks.mozilla.org/2015/07/es6-in-depth-classes/ où l'auteur a défini:

[functionThatReturnsPropertyName()] (args) { ... }

Je ne sais pas non plus si vous devriez utiliser cette syntaxe. Ce n'est pas largement connu. Les autres membres de votre équipe pourraient ne pas comprendre le code.

32
ucstre

Excellente question. J'ai eu du mal à comprendre cela avec un trait de soulignement, mais la réponse est simple:

var a = "whatever";
var b = {a : 20};

var array = [a, b]
var answer = _.object([[array]])// {whatever: {a:20}}//NOTICE THE DOUBLE SET OF BRACKETS AROUND [[array]]

J'espère que ça aide!

5
rashadb
var a = "whatever";
var b = {a : 20};
b[a] = 37;
alert(b["whatever"]); // 37

'a' est une chaîne avec la valeur 'a'. a est une variable avec la valeur 'whatever'.

5
Rocket Hazmat

Essaye ça:

var a = "whatever";
var c = "something";
var b = {whatever : 20, something: 37};
alert(b[a]); // Shows 20
alert(b[c]); // Shows 37

Voici le violon .

Ou, si je comprends bien les commentaires ci-dessous, essayez ceci:

var a = "whatever";
var b = {a : 20};
alert(b.a); // Shows 20
2
Neal

Pour afficher toutes les options, je veux mentionner le CoffeeScript , ce qui est:

var a = "whatever";
var b = (
  obj = {},
  obj["" + a] = 20,
  obj
);

alert(b.whatever); // 20

Bien que je préfère:

var a = "whatever";
var b = {};
b[a] = 20;

alert(b.whatever); // 20
0
Benny Neugebauer

Et si c'est 

var a = "whatever.other";
var b = {a:20};
expected output b["whatever"]["other"] should return 20
0
cris