在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);
答
这条线:
arr2AggregateArray[i] = arr2;
把一个参考到arr2
为arr2AggregateArray
,不是复制。所有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
的返回值。
请同时分享您的shuffle功能。 –