繁体   English   中英

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

[英]Javascript - How to push an array to a 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] ,当我将此值推送到多维数组grades时,所有值都更改为[9, 1, 0, 0] 因此,多维数组应如下所示: [[9, 1, 0, 0], [9, 1, 0, 0], [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就在这里

这是你所追求的吗?

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_quesi <= num_ques替换了i < num_qes + 1
  • 仅在满足条件时在内部循环中创建成绩数组(使其更具可读性)
  • 直接对数字求和,而不是从刚刚填充的成绩数组中读取(再次可读)
  • 使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM