2012-01-12 2 views
1

- { "abc": [x1, x2], "efg": [x3, x4, x1]}의 개체를 동적으로 만들고 싶습니다. 다음 코드는 일하고 .. 여기서 뭐가 문제 야?자바 스크립트 개체 키 및 배열로 배열

var catCmp = {}; 
var x1="abc"; 
var x2="efg"; 

var y1="x1"; 
var y2="x2"; 
var y3="x3"; 
var y4="x4"; 

if (typeof catCmp[x1] === 'undefined') { 
    catCmp[x1] = []; 
} 
if (typeof catCmp[x2] === 'undefined') { 
    catCmp[x2] = []; 
} 

catCmp[x1] = catCmp[x1].push(y1); 
catCmp[x1] = catCmp[x1].push(y2); 
catCmp[x2] = catCmp[x2].push(y3); 
catCmp[x2] = catCmp[x2].push(y4); 
catCmp[x2] = catCmp[x2].push(y1); 

console.log('catCmp :::', catCmp); 
+0

왜이'catCmp [X1] = catCmp [1 개] .push (Y1)를하고있는 대신'catCmp [1 개] .push (Y1)의','? –

+0

특히 "push 메서드는 새로운 개체의 길이를 반환합니다.".. – user644745

답변

6

푸시 작업 결과를 다시 지정할 필요가 없습니다. 당신은 단순히 라인에서 catCmp[x1].push(y1);

+1

푸시 메서드가 새 개체의 길이를 반환하기 때문에 실제로는 안됩니다. – riship89

+2

예, 그렇지 않아야합니다. 나는 단지 좋은 방법으로 그것을 말하고 있었다! :-) – techfoobar

0
catCmp[x1].push(y1); 
catCmp[x1].push(y2); 
catCmp[x2].push(y3); 
catCmp[x2].push(y4); 
catCmp[x2].push(y1); 
3

를 호출 할 수

catCmp[x1] = catCmp[x1].push(y1); 

catCmp[x1].push(y1)에 의해 반환되는 값이 y1의 값입니다. 이것이 catCmp[x1]에 할당 된 값입니다. 할당을하지 않는다, 다른 답변에서 제안한 것처럼

, 그냥 수행

catCmp[x1].push(y1); 
0

JavaScript push method는 메소드가 호출 추진하는시 객체의 새 길이를 반환합니다.

따라서, 귀하의 경우,

catCmp[x1] = catCmp[x1].push(y1); 

이 catCmp [X1은] = catCmp [1 개] .length

다만 당신이 필요가 없습니다, 당신은 푸시의 결과를 다시 할당해서는 안됩니다하게 문 조작. 그래서, 그냥 사용

catCmp[x1].push(y1); 
관련 문제