2014-11-04 47 views
-2

我剛剛創建了兩個數組,併爲其中一個數組分配了一個鍵值對。然後我分配或複製到另一個數組。之後,我添加了另一個鍵值對第二個數組,但它也反映到原始數組。例如。JavaScript數組分配問題

var array1 =[]; 
var array2 =[]; 
array1.value1 ='1'; 
array2 = array1; 
array2.value2 ='2'; 
console.log(array1); // it prints {value1:1, value2:2} 

爲什麼它改變了array1對象,而我爲array2添加了一個鍵值對呢?

+1

很明顯,你沒有複製。而且你沒有正確使用陣列。 – 2014-11-04 21:21:52

+0

之前詢問過許多其他人的重複問題。我會去找一個這樣的人。 – jfriend00 2014-11-04 21:22:43

+0

@ jfriend00:雖然對引用問題的回答也回答了這個問題,但我不認爲這個問題是該問題的重複。不是我懷疑這可能是** **的重複。 – 2014-11-04 21:31:13

回答

1

當您執行類似array2 = array1;的操作時,您只需將array2設置爲參考array1即可。要製作array1的副本,您需要做array2 = array1.slice();

此外,您不能將元素設置爲array1.value1 ='1';。你在那裏做的是將你的陣列轉換爲Object。所以,你真的應該做的事情是:

var array1 = []; 
var array2 = []; 
array1[0] = 1; 
array2 = array1.slice(); 
array2[1] = 2; 
1

這樣做array2 = array1;你分配陣列1對象數組2變量。因此,修改array2將修改與之相關的對象,即array1

0

因爲您將引用array1傳遞給array2。你需要做一個副本,如:

 
array2 = new Array(array1); 
+0

誰提高了這個? – 2014-11-04 21:24:46

+0

這實際上不起作用。它創建一個數組array1作爲數組中的一個項目。 – Vall3y 2014-11-04 21:24:47

+0

我不知道。不過,我反駁了這一點。 :-) – 2014-11-04 21:29:01