2012-03-07 16 views
0

内部コピー配列は、私は次のコードに問題抱えている:javascriptの - 機能

test1 = [0,0]; 
function func(test) 
{ 
    var test2 = new Array(); 
    for(var i = 0; i < test.length; i++) 
    if(test[i] == 0) 
    { 
     test[i] = 1; 
     test2.push(test); 
     test[i] = 0; 
    } 
    return test2; 
} 
a = func(test1); 
document.write(a[0].toString()+"<br/>"); 
document.write(a[1].toString()); 

と出力されています:私はすでにコンソールで確認している

0,0 
0,0 

:私は、テストを変更したとき[i]条件内で、test2.push(test)の後、test2 [test2.length]も変更されます。 (WHY?)

スコープに問題はありますか? このような出力を得るにはどうすればよいですか?

1,0 
0,1 

ありがとうございます。

+1

'= funcを(テスト); //ここでのテストは何ですか?? ' – linuxeasy

+0

Upsss ... correct。これはtest1です。 – Atoso

答えて

2
test2.push(test); 

これはテスト配列のコピーを作成するのではなく、入力配列への新しい参照を保存するだけです。だからあなたのすべての機能は、同じ入力パラメータへの参照の多数を格納することです。配列のコピーを作成するために

test2.push(test.slice(0)); 
+0

@ user1150525、両方の答えが私の問題を解決しました。ありがとう – Atoso

0

使用slice:あなたは本当のコピーを保存したい場合は、これを使用

var a = [1,2,3] 
var b = a.slice(); 
b[0] = 0; 
a[0] == 1;