2012-12-12 3 views
119

JS 개체 속성 이름을 동적으로 설정해야합니다.변수에서 JS 개체 속성 이름을 설정하는 방법

for(i=1; i<3; i++) { 
    var key = i+'name'; 

    data = { 
     key : 'name1', 
    } 
} 

결과는 다음과 같아야합니다

data = { 
    1name: 'name1' 
    2name: 'name1' 
} 
+0

순차적 인 경우 왜 배열을 사용하지 않습니까? – epascarello

+0

나는 당신 중 세 명이 잘못된 화살을 쳤다는 것을 알고 싶습니다. 어서, 진정해. – Charles

+0

[JavaScript 객체 리터럴에서 키에 변수 사용하기] 가능한 중복 (http://stackoverflow.com/questions/2274242/using-a-variable-for-a-key-in-a-javascript-object- 문자 그대로) – halfer

답변

130
var jsonVariable = {}; 
for(var i=1; i < 3; i++) { 
    jsonVariable[i + 'name'] = 'name' + i;   
} 
+3

무사의 응답은 실제로 [] 표기법을 사용하는 것이 실제로 그것을 수행 할 수있는 유일한 방법이라는 것을 분명히 말합니다. –

+0

또한 아래의 @ ChilNut의 응답은 ES6을 사용하여이 작업을 수행하는 가장 쉬운 방법을 설명합니다. – rambossa

+0

실제로 OP가 얻으려는 새로운 구문은 루프 제한이 하드 코드되고 작을 경우에만 가능합니다. – Musa

18

이 동적으로 당신은 동적으로 키를 설정하는 [] 표기법을 사용해야합니다 값

var jsonVariable = {}; 
for (var i = 1; i < 3; i++) { 
    var jsonKey = i + 'name'; 
    jsonVariable[jsonKey] = 'name' + i; 
} 
85

를 설정하는 방법입니다.

var jsonVariable = {}; 
for(i=1; i<3; i++) {   
var jsonKey = i+'name'; 
jsonVariable[jsonKey] = 'name1'; 

} 

이제 ES6에 당신은 []

var key = i + 'name'; 
data = { 
    [key] : 'name1', 
} 
+1

jsonVariable = {}; for 루프 내에서 초기화하면 안됩니다. – closure

+0

@raghavv 고마워요 – Musa

+0

여기에 jsonVariable을 만들고 있습니다 –

-1

확인이 밖으로

jsonVariable = {}; 
for(i=1; i<=3; i++) {   
jsonVariable[i]=i+'name'; 
} 
document.writeln(jsonVariable[1]); 
document.writeln(jsonVariable[2]); 
document.writeln(jsonVariable[3]); 

​ 
0
jsonVariable = {} 
for(i=1; i<3; i++) {   
    var jsonKey = i+'name'; 
    jsonVariable[jsonKey] = 'name1' 
} 

이 의지에 변수를 포장, 동적 오브젝트 키를 생성하는 객체 리터럴 구문을 사용할 수 있습니다 와 유사해야합니다.

ECMAScript를 6 94,
58

, 당신은 다음과 같이 객체 리터럴 구문을 사용하여 변수 속성 이름을 사용할 수 있습니다

var keyName = 'myKey'; 
var obj = { 
       [keyName]: 1 
      }; 
obj.myKey;//1 

이 구문이 사용할 수있는 다음과 같은 최신 브라우저에서 :

에지 12 + (아니 IE 지원 없음), FF34 +, 크롬 44+, 오페라 31+, 사파리 7.1 이상

(https://kangax.github.io/compat-table/es6/)

babel과 같은 transpiler을 사용하여 이전 브라우저에 지원을 추가 할 수 있습니다. rollup 또는 webpack과 같은 모듈 번들을 사용하는 경우 전체 프로젝트를 쉽게 옮길 수 있습니다.

+12

이것은 새로운 대답 일 것입니다 ... – lotif

+2

멋진 ES6 구문을 추가해 주셔서 감사합니다 – rambossa

4

변수의 출처는 중요하지 않습니다. 우리가 가지고있는 주요한 것 ... 대괄호 "[..]"사이에 변수 이름을 설정하십시오.

var optionName = 'nameA'; 
var JsonVar = { 
[optionName] : 'some value' 
} 
+0

이것은 훌륭하게 작동합니다. 모든 브라우저/버전에서 작동하는지 궁금합니다. – Mercury

관련 문제