Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环在每次迭代中修改一个变量,并附加每个新的;“修改”;排列_Javascript_Arrays_Loops - Fatal编程技术网

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]++;
}