2010-06-30 7 views
55

Ist es überhaupt möglich, Variablennamen in Objektliteraleigenschaften für die Objekterstellung zu verwenden?Objekt mit Variablen für Eigenschaftsnamen erstellen

Beispiel

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

var myObject = createJSON("myProperty"); 

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

Antwort

113

Wenn in ES6 Sie eine Variable für einen Eigenschaftsnamen verwenden möchten, können Sie die neue ComputedPropertyName Syntax. Legen Sie die Variablennamen in eckigen Klammern:

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

In ES5, müssen Sie zuerst das Objekt erstellen und dann die Eigenschaft hinzufügen square bracket notation verwenden.

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

Wenn Sie JSON programmatisch erstellen wollten, würden Sie das Objekt in einen String konform JSON-Format serialisiert werden müssen. z.B. mit the JSON.stringify method.

+0

Danke! Ich habe mir dabei wirklich den Kopf zerschlagen. – Jpsh

6

Sie können Art, dies zu tun:

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

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

ich das selbst viel perfer obwohl Syntax:

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

HINWEIS:

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

Dann Sie die folgenden Befehle verwenden, kann dieses nutzt die json2.js von hier: http://www.json.org/js.html

4

Eine Sache, die geeignet sein könnte (jetzt, da JSON-Funktionalität in neueren Browsern üblich ist und json2.js ein vollkommen gültiger Fallback ist), besteht darin, einen JSON-String zu konstruieren und ihn dann zu parsen.

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

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

Gerade im Auge behalten, müssen JSON Eigenschaftsnamen in doppelten Anführungszeichen eingeschlossen werden.

35

ES6 führt berechneten Eigenschaftsnamen, die Sie

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

Hinweis Browser-Unterstützung derzeit vernachlässigbar ist zu tun ermöglichen.

+0

interessant, irgendwelche Updates auf Browser-Unterstützung? – Ayyash

+0

Als ich die Antwort schrieb, nur Firefox Nigthly. Jetzt Firefox 34+ und Safari 7.1.3+, nach [MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Browser_compatibility). – Oriol

+0

Das ist die beste Antwort für mich. Ich benutze nodejs. – James