Javascript - 如何将数组推送到多维数组

时间:2016-01-11 20:43:48

标签: javascript arrays multidimensional-array

我试图将我生成的数组推送到多维数组,并且由于某种原因,数组值中所有其他位置的值与我刚刚推送的值相同。

例如:我做

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

1 个答案:

答案 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
  • 只有在满足条件时才在内循环中创建成绩数组(使其更具可读性)
  • 直接对数字求和,而不是从刚刚填充的等级数组中读取(再次更具可读性)
  • 使用console.log()输出符合条件的结果

控制台中的结果看起来像这样......

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