2010-06-30 2 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 구문을 사용할 수 있습니다. 대괄호 사이에 변수 이름을 장소 : ES5에서

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

을 먼저 객체를 만든 다음 square bracket notation를 사용하여 속성을 추가해야합니다.

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

프로그래밍 방식으로 JSON을 만들려면 개체를 JSON 형식을 준수하는 문자열로 직렬화해야합니다. 예 : the JSON.stringify method.

+0

고마워요! 나는 정말로이 일에 머리를 쓰고 있었다. – Jpsh

6

당신은 종류의이 작업을 수행 할 수 있습니다

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

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

을 나는 많이 perfer이 비록 자신을 구문 :

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

참고 :

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

그런 다음 다음을 사용할 수 있습니다이를 여기에서 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

+0

대답을 쓸 때만 Firefox Nigthly. 이제 Firefox 34+ 및 Safari 7.1.3+, [MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Browser_compatibility)에 따라. – Oriol

+0

이것은 나에게 가장 좋은 대답입니다. nodejs를 사용하고 있습니다. – James

관련 문제