2012-01-12 37 views
1

我想動態地創建一個形式的對象 - {「abc」:[x1,x2],「efg」:[x3,x4,x1]} 以下代碼不是工作......這裏有什麼問題?JavaScript對象鍵和數值作爲數組

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 [X1] .push(Y1);',而不是'catCmp [X1] .push(Y1);'? – 2012-01-12 07:08:46

+0

感謝所有的指針,特別是「推新方法返回新對象的長度」。 – user644745 2012-01-12 09:31:49

回答

6

您不需要分配推送操作的結果。你可以簡單地調用catCmp[x1].push(y1);

+1

不僅僅是你不需要,實際上你不應該,因爲push方法返回新對象的長度。 – riship89 2012-01-12 07:17:34

+2

是的,你不應該。我只是用一種很好的方式說出來! :-) – techfoobar 2012-01-12 07:19:22

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 [X1]。長度

不只是你不需要,你不應該分配回推的結果操作。因此,只需使用:

catCmp[x1].push(y1);