2010-06-30 12 views
55

Czy jest możliwe używanie nazw zmiennych w obiektowych właściwościach literowych do tworzenia obiektów?utworzyć obiekt przy użyciu zmiennych dla nazwy właściwości

Przykład

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

var myObject = createJSON("myProperty"); 

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

Odpowiedz

113

Jeżeli w ES6, chcesz użyć zmiennej dla nazwy właściwości, można użyć nowej składni ComputedPropertyName. Umieścić nazwę zmiennej w nawiasach kwadratowych:

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

W ES5, trzeba najpierw stworzyć obiekt, a następnie dodać bezpośrednio personelowi square bracket notation.

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

Jeśli chciał programowo utworzyć JSON, trzeba by serializacji obiektu do łańcucha zgodnego z formatem JSON. na przykład z the JSON.stringify method.

+0

Dzięki! Naprawdę walnąłem o to głową. – Jpsh

6

Można rodzaj to zrobić:

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

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

I wiele perfer tej składni sobie jednak:

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

Następnie można użyć następujące:

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

UWAGA: Ta korzysta z json2.js stąd: http://www.json.org/js.html

4

Jedna rzecz, która może być odpowiednia (teraz, gdy funkcjonalność JSON jest wspólna dla nowszych przeglądarek, a json2.js jest całkowicie poprawnym awaryjnym), jest skonstruowanie łańcucha JSON, a następnie przeanalizowanie go.

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

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

Wystarczy pamiętać, nazwy właściwości JSON muszą być ujęte w cudzysłów.

35

ES6 wprowadza obliczone nazwy właściwości, które pozwalają zrobić

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

wsparcie przeglądarka Note jest obecnie znikome.

+0

ciekawe, jakieś aktualizacje dotyczące obsługi przeglądarki? – Ayyash

+0

Kiedy napisałem odpowiedź, tylko Firefox Nigthly. Teraz Firefox 34+ i Safari 7.1.3+, zgodnie z [MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Browser_compatibility). – Oriol

+0

To dla mnie najlepsza odpowiedź. Używam nodejs. – James

Powiązane problemy