1717 votes

JavaScript set object key by variable

Je construis des objets en JavaScript et je les place dans un tableau. Je stocke la clé que je veux utiliser dans une variable puis je crée mes objets comme suit :

var key = "happyCount";
myArray.push( { key : someValueArray } );

mais lorsque j'essaie d'examiner mon tableau d'objets, pour chaque objet, la clé est "key" au lieu de la valeur de la variable key. Existe-t-il un moyen de définir la valeur de la clé à partir d'une variable ?

Fiddle pour une meilleure explication : http://jsfiddle.net/Fr6eY/3/

677 votes

La solution dans ES6 est de mettre la variable entre crochets afin de l'évaluer. var key = "happyCount"; myArray.push({ [key]: someValueArray });

0 votes

@DanCron C'est très bien, mais quand est-ce que plus de 99 % des "navigateurs" de la base d'utilisateurs seront compatibles avec ES6 ?

8 votes

@Jake Le seul navigateur qui ne supporte pas actuellement cette fonctionnalité es6 est IE11 : kangax.github.io/compat-table/es6/

3037voto

Rocket Hazmat Points 87407

Vous devez d'abord créer l'objet, puis utiliser la fonction [] pour le régler.

var key = "happyCount";
var obj = {};

obj[key] = someValueArray;
myArray.push(obj);

MISE À JOUR 2021 :

Noms de propriétés calculés a été introduite dans l'ECMAScript 2015 (ES6). Elle vous permet de calculer dynamiquement les noms des propriétés de l'objet en notation littérale d'objet JavaScript.

const yourKeyVariable = "happyCount";
const someValueArray= [...];

const obj = {
    [yourKeyVariable]: someValueArray,
}

2 votes

Où avez-vous défini myArray ?

5 votes

@AlexG : Il a été utilisé dans la question.

411 votes

Notez que les choses ont changé pour le mieux dans ES6 c'est-à-dire {[key]:someValueArray}

617voto

kiranvj Points 3551

En ES6, vous pouvez faire comme ceci.

var key = "name";
var person = {[key]:"John"}; // same as var person = {"name" : "John"}
console.log(person); // should print  Object { name="John"}

    var key = "name";
    var person = {[key]:"John"};
    console.log(person); // should print  Object { name="John"}

C'est ce qu'on appelle des noms de propriétés calculés, et c'est mis en œuvre en utilisant la notation des parenthèses (crochets). []

Exemple : { [variableName] : someValue }

À partir d'ECMAScript 2015, la syntaxe de l'initialisateur d'objet supporte également supporte également les noms de propriétés calculés. Cela vous permet de mettre une expression entre crochets [], qui sera calculée et utilisée comme nom de propriété.

Pour ES5, essayez quelque chose comme ceci

var yourObject = {};

yourObject[yourKey] = "yourValue";

console.log(yourObject );

exemple :

var person = {};
var key = "name";

person[key] /* this is same as person.name */ = "John";

console.log(person); // should print  Object { name="John"}

    var person = {};
    var key = "name";

    person[key] /* this is same as person.name */ = "John";

    console.log(person); // should print  Object { name="John"}

0 votes

J'ai fourni une solution qui, je pense, peut intéresser les gens à ce lien en utilisant underscore : stackoverflow.com/questions/5640988/

10voto

devtunus Points 21

Utilisez ça.

var key = 'a'
var val = 'b'

console.log({[key]:val})

//a:'b'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X