web-dev-qa-db-fra.com

créer un objet en utilisant des variables pour le nom de la propriété

Est-il possible d'utiliser des noms de variables dans les propriétés littérales des objets pour la création d'objets?

Exemple

function createJSON (propertyName){
    return { propertyName : "Value"};
}

var myObject = createJSON("myProperty");

console.log(myObject.popertyName);  // prints "value"
console.log(myObject.myProperty);  // Does not exist
77
balafi

Si vous souhaitez utiliser une variable pour un nom de propriété, vous pouvez utiliser Noms de propriété calculés . Placez le nom de la variable entre crochets:

var foo = "bar";
var ob  = { [foo]: "something" }; // ob.bar === "something"

Si vous souhaitez un support Internet Explorer, vous devrez utiliser l'approche ES5 (que vous pourriez obtenir en écrivant une syntaxe moderne (comme ci-dessus) puis en appliquant Babel ). :

Créez d'abord l'objet, puis ajoutez la propriété en utilisant la notation entre crochets .

var foo = "bar";
var ob  = {};
ob[foo] = "something"; // === ob.bar = "something"

Si vous souhaitez créer un programme JSON par programme, vous devez sérialiser l'objet en une chaîne conforme au format JSON. par exemple. avec le JSON.stringify méthode .

160
Quentin

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

function CreateJSON (propertyName){
    var myObject = { [propertyName] : "Value"};
}

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

40
Oriol

Vous pouvez en quelque sorte faire ceci:

  var myObject = {};
  CreateProp("myProperty","MyValue");

  function CreateProp(propertyName, propertyValue)
  {
      myObject[propertyName] = propertyValue;
      alert(myObject[propertyName]);  // prints "MyValue" 
  };

Je préfère cependant cette syntaxe:

function jsonObject()
{
};
var myNoteObject = new jsonObject();

function SaveJsonObject()
{
    myNoteObject.Control = new jsonObject();
    myNoteObject.Control.Field1= "Fred";
    myNoteObject.Control.Field2= "Wilma";
    myNoteObject.Control.Field3= "Flintstone";
    myNoteObject.Control.Id= "1234";
    myNoteObject.Other= new jsonObject();
    myNoteObject.Other.One="myone";
};

Ensuite, vous pouvez utiliser les éléments suivants:

SaveJsonObject();
var myNoteJSON = JSON.stringify(myNoteObject);

NOTE: Ceci utilise les json2.js d’ici: http://www.json.org/js.html

7
Mark Schultheiss

Une chose qui peut convenir (maintenant que la fonctionnalité JSON est commune aux navigateurs récents et que json2.js est une solution de secours parfaitement valide) est de construire une chaîne JSON, puis de l’analyser.

function func(prop, val) {
    var jsonStr = '{"'+prop+'":'+val+'}';
    return JSON.parse(jsonStr);
}

var testa = func("init", 1);
console.log(testa.init);//1

N'oubliez pas que les noms de propriété JSON doivent être placés entre guillemets.

5
Chase