2010-06-30 2 views
55

È possibile utilizzare nomi di variabili nelle proprietà letterali dell'oggetto per la creazione dell'oggetto?crea oggetto utilizzando variabili per nome proprietà

Esempio

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

var myObject = createJSON("myProperty"); 

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

risposta

113

Se, in ES6, si desidera utilizzare una variabile per un nome di proprietà, è possibile utilizzare la nuova sintassi ComputedPropertyName. Posizionare il nome della variabile tra parentesi quadre:

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

In ES5, è necessario creare l'oggetto prima, e poi aggiungere la proprietà utilizzando square bracket notation.

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

Se si voleva creare programatically JSON, si avrebbe per serializzare l'oggetto in una stringa conforme al formato JSON. per esempio. con the JSON.stringify method.

+0

Grazie! Mi stavo davvero sbattendo la testa. – Jpsh

6

È possibile ordinare di fare questo:

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

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

di gran lunga Perfer questa sintassi me però:

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"; 
}; 

quindi è possibile utilizzare il seguente:

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

NOTA: Questo fa uso di json2.js da qui: http://www.json.org/js.html

4

Una cosa che può essere adatta (ora che la funzionalità JSON è comune ai browser più recenti e json2.js è un fallback perfettamente valido), è di costruire una stringa JSON e quindi analizzarla.

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

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

Basta tenere a mente, nomi di proprietà JSON devono essere racchiusa tra doppi apici.

35

ES6 introduce nomi di proprietà calcolati, che ti permettono di fare

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

supporto Nota del browser è attualmente trascurabile.

+0

interessante, eventuali aggiornamenti sul supporto del browser? – Ayyash

+0

Quando ho scritto la risposta, solo Firefox nientemeno. Ora Firefox 34+ e Safari 7.1.3+, in base a [MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Browser_compatibility). – Oriol

+0

Questa è la migliore risposta per me. Sto usando nodejs. – James