2010-06-30 98 views
55

是否儘可能在對象字面值屬性中使用變量名稱來創建對象?使用屬性名稱變量創建對象

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

var myObject = createJSON("myProperty"); 

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

回答

113

如果在ES6,要使用一個變量屬性名稱,你可以使用新的ComputedPropertyName語法。將方括號內的變量名:

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

在ES5,你必須首先創建對象,然後添加使用square bracket notation財產。

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

如果您想以編程方式創建JSON,則必須將該對象序列化爲符合JSON格式的字符串。例如與the JSON.stringify method

+0

謝謝!我真的在這個問題上抨擊我。 – Jpsh 2015-07-27 10:50:30

6

您可以排序的做到這一點:

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

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

我更perfer這雖然語法自己:

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

然後你可以使用以下命令:

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

注:此從這裏使用json2.js:http://www.json.org/js.html

4

有一件事可能是合適的(現在JSON功能對於較新的瀏覽器是常見的,而json2.js是一個完美有效的回退),就是構造一個JSON字符串,然後解析它。

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

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

只要記住,JSON屬性名必須用雙引號。

35

ES6介紹計算的屬性名稱,它允許你做

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

注意瀏覽器的支持,目前可以忽略不計。

+0

有趣,瀏覽器支持的任何更新? – Ayyash 2015-04-15 07:46:18

+0

當我寫了答案,只有Firefox Nigthly。根據[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Browser_compatibility),現在是Firefox 34+和Safari 7.1.3+。 – Oriol 2015-04-15 15:20:16

+0

這對我來說是最好的答案。我正在使用nodejs。 – James 2016-02-17 12:45:16