我试图将我生成的数组推送到多维数组,并且由于某种原因,数组值中所有其他位置的值与我刚刚推送的值相同。
例如:我做
var grades = [];
for(var i = 0; i < num_qes + 1; i++){
var grade = [0, 0, 0, 0];
grade[0] = i;
for(var n = 0; n < num_qes+ 1; n++){
grade[1] = n;
for(var f = 0; f < num_qes+ 1; f++){
grade[2] = f;
for(var t = 0; t < num_qes+ 1; t++){
grade[3] = t;
allGrad = grade[0] + grade[1] + grade[2] + grade[3];
//println(allGrad);
if(allGrad === num_qes){
grades.push(grade);
}
}
}
}
最后,我检查生成的数组中的所有值是否与问题数完全相等。
if(allGrad === num_qes){
grades.push(grade);
}
假设grade = [9, 1, 0, 0]
,当我将此值推送到多维数组时,等级,所有值都会更改为[9, 1, 0, 0]
。所以多维数组看起来像这样:[[9, 1, 0, 0], [9, 1, 0, 0], [9, 1, 0, 0]]
,当它应该如下所示:[[9, 0, 0, 1], [9, 0, 1, 0], [9, 1, 0, 0]]
。
我希望我所说的能够理解,并提前感谢你的回复。
jsfiddle是正确的here
答案 0 :(得分:1)
这就是你想要的吗?
var grades = [];
var num_qes = 4;
for(var i = 0; i <= num_qes; i++){
for(var n = 0; n <= num_qes; n++){
for(var f = 0; f <= num_qes; f++){
for(var t = 0; t <= num_qes; t++){
var sum = i + n + f + t;
if(sum === num_qes){
console.log(i + ',' + n + ',' + f + ',' + t);
var grade = [i, n, f, t];
grades.push(grade);
}
}
}
}
}
注意:
i < num_qes + 1
替换为i <= num_ques
控制台中的结果看起来像这样......
0,0,0,4
0,0,1,3
0,0,2,2
0,0,3,1
0,0,4,0
0,1,0,3
0,1,1,2
0,1,2,1
0,1,3,0
etc