2012-01-12 9 views
1

- {"abc":[x1、x2]、 "efg":[x3、x4、x1]}のオブジェクトを動的に作成したい 次のコードは働いて..ここで何が問題なの?javacriptオブジェクトのキーと値を配列として

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)の ';'? –

+0

すべてのポインタのおかげで特に "プッシュメソッドは新しいオブジェクトの長さを返します" .. – 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 [X1]

.LENGTHは、あなたがプッシュの結果をバックに割り当てるべきではありません未ます操作。だから、ちょうど使用:

catCmp[x1].push(y1); 
関連する問題