2016-04-21 35 views
2

我對JQuery很新,很抱歉如果這是一個天真的問題。我試圖隨機化一個3個數字的數組,35次。每次我洗牌3個數字的數組並寫入控制檯,看起來就像是一個新的洗牌。但是,當我將每個新的混洗添加到一個數組並打印其全部內容時,看起來該數組存在最後一次混洗的35個副本。在For循環中製作的JQuery數組,所有元素都相同

在此先感謝!

var arr2 = [0,1,2]; 

var seedArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35] 

var arr2AggregateArray = []; 

for (i = 0; i < 35; i++) { 
    seed = seedArray[i]; 
    shuffle(arr2,seed); 
    console.log(arr2); 
    arr2AggregateArray[i] = arr2; 
    console.log(arr2); 
} 

console.log(arr2AggregateArray); 
+0

請同時分享您的shuffle功能。 –

回答

5

這條線:

arr2AggregateArray[i] = arr2; 

把一個參考arr2arr2AggregateArray,不是複製。所有35個參考文獻涉及相同的陣列:

 
+--------------------+ 
| arr2AggregateArray | 
+--------------------+    +------+ 
| 0: *ref*   |---+-+-+-+-+->| arr2 | 
| 1: *ref*   |--/// / +------+ 
| 2: *ref*   |---/// | 0: 2 | 
| 3: *ref*   |----/ / | 1: 0 | 
| ...    |  / | 2: 1 | 
| 34: *ref*   |------/  +------+ 
+--------------------+ 

您需要複印。在這種情況下,因爲它只是包含原語(數字),淺拷貝會做:

arr2AggregateArray[i] = arr2.slice(0); 

您還沒有表現出你的shuffle功能,所以我認爲它打亂就地數組。如果它返回新的混洗陣列,那麼你不需要上面的slice,但你只需要使用shuffle的返回值。

相關問題