在For循环中制作的JQuery数组,所有元素都相同

问题描述:

我对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功能。 –

这条线:

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的返回值。