Javascript 循环在每次迭代中修改一个变量,并附加每个新的;“修改”;排列
我正在尝试为游戏集生成一副牌组,或者,对于那些不知道这是什么的人,我正在尝试用表单Javascript 循环在每次迭代中修改一个变量,并附加每个新的;“修改”;排列,javascript,arrays,loops,Javascript,Arrays,Loops,我正在尝试为游戏集生成一副牌组,或者,对于那些不知道这是什么的人,我正在尝试用表单[a,b,c,d]的唯一元素填充一个数组,其中0只要记住每次迭代都将相同的count放入牌组中,这意味着对计数的任何更改都将反映到deck中的所有其他count,因为它们都引用相同的数组 您可以使用.slice从以前的count克隆具有相同值的新数组 var deck=[], 计数=[0,0,0,0]; 对于(var i=0;i
[a,b,c,d]
的唯一元素填充一个数组,其中0只要记住每次迭代都将相同的count
放入牌组中,这意味着对计数的任何更改都将反映到deck
中的所有其他count
,因为它们都引用相同的数组
您可以使用.slice
从以前的count
克隆具有相同值的新数组
var deck=[],
计数=[0,0,0,0];
对于(var i=0;i<81;i++){//遍历所有组合
//从上一个阵列克隆新阵列。
count=count.slice();
deck.push(count);//将当前对count的修改附加到deck
//按1递增计数,必要时携带“十”
对于(变量j=3;计数[j]==2;j--){
//如果“数字”为2,则将其设为0,因为它已溢出
计数[j]=0;
}
//j是计数的第一个“数字”,它不是2,所以我们加1
计数[j]++;
}
控制台。原木(甲板)
因为您将同一数组推送到数据组81次,所以更改其中任何一个数组的值都会反映到该数组中的所有数组中,请尝试使用count=count.slice()
从以前的每次迭代中创建一个新数组。但为什么计数相同?我每次都修改它。我以为JS没有引用那样的对象(比如Java等)?在你的帖子中,你推到组中的项目和计数都引用了相同的数组,所以当你修改其中一个时,另一个会反映出变化。因此,您需要在每次迭代中对不同的数组进行计数引用,然后它的修改将不会反映在deck
中的项中,因为它们现在引用的是不同的数组。您可以从中找到更多信息,也可以简单地使用count=[]
重新初始化空数组。
var deck = [],
count = [0, 0, 0, 0];
for (var i = 0; i < 81; i++) { // go through all combos
deck.push(count); // append the current modification of count to deck
// increment count by 1, carrying "tens" if necessary
for (var j = 3; count[j] === 2; j--) {
// if the "digit" is 2, make it 0 since it overflows
count[j] = 0;
}
// j is the first "digit" of count that isn't already 2, so we add 1 to it
count[j]++;
}