2010-06-30 9 views
55

Est-il possible d'utiliser des noms de variables dans les propriétés littérales d'objet pour la création d'objet?créer un objet en utilisant des variables pour le nom de propriété

Exemple

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

var myObject = createJSON("myProperty"); 

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

Répondre

113

Si, ES6, vous souhaitez utiliser une variable pour un nom de propriété, vous pouvez utiliser la nouvelle syntaxe ComputedPropertyName. Placez le nom de la variable entre crochets:

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

En ES5, vous devez créer d'abord l'objet, puis ajoutez la propriété à l'aide square bracket notation.

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

Si vous voulez créer programatically JSON, vous devez sérialiser l'objet d'une chaîne conforme au format JSON. par exemple. avec the JSON.stringify method.

+0

Merci! Je me cachais vraiment la tête à ce sujet. – Jpsh

6

Vous pouvez faire sorte de ceci:

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

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

Je beaucoup perfer moi-même syntaxe que:

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: Ce utilise le json2.js d'ici: http://www.json.org/js.html

4

Une chose qui peut convenir (maintenant que la fonctionnalité JSON est commune aux nouveaux navigateurs, et json2.js est une solution de repli 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 

Il suffit de garder à l'esprit, les noms de propriété JSON doivent être entre guillemets.

35

ES6 présente les noms de propriétés calculées, qui vous permettent de faire

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

support du navigateur Remarque est actuellement négligeable.

+0

intéressant, des mises à jour sur le support du navigateur? – Ayyash

+0

Quand j'ai écrit la réponse, seulement Firefox Nigthly. Maintenant, Firefox 34+ et Safari 7.1.3+, selon [MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Browser_compatibility). – Oriol

+0

C'est la meilleure réponse pour moi. J'utilise nodejs. – James