For-Loop生成多维数组

时间:2016-04-07 19:22:00

标签: javascript for-loop multidimensional-array

提前感谢您花时间帮我解决这个问题。

我正在尝试使用for循环生成一个这样的简单板。

var board = [[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]];

但是,我在下面的尝试并没有成功。

function makeBoard(n){
  var board=[];
  for(var i=0; i<n; i++){
    for(var j=0; j<n; j++){
      board[i][j]=0;
    }
  }
  return board;
}

从技术上讲,我可以使用上面显示的电路板变量,然后继续,但我更关心原理。是不是可以使用for循环创建多维数组?有没有一种简单的方法可以使用array.push()实现这一点?

3 个答案:

答案 0 :(得分:2)

JavaScript没有多维数组,因此您必须使用数组数组:

function makeBoard(n){
  var board=[];
  for(var i=0; i<n; i++){
    board[i] = [];
    for(var j=0; j<n; j++){
      board[i][j]=0;
    }
  }
  return board;
}

您错过了为第二维创建每个数组所需的board[i] = [];

注意:您也可以使用Array.prototype.fill

function makeBoard(n){
  var board=[];
  for(var i=0; i<n; i++){
    board[i] = Array(n).fill( 0 );
  }
  return board;
}

答案 1 :(得分:1)

您需要为每个新子数组初始化为array

function makeBoard(n){
    var board=[];
    for(var i=0; i<n; i++){
        board[i] = []; // <-- this is missing!
        for(var j=0; j<n; j++){
            board[i][j]=0;
        }
    }
    return board;
}
document.write('<pre>' + JSON.stringify(makeBoard(5), 0, 4) + '</pre>');

没有for循环的另一个版本

function makeBoard(n){
    return Array.apply(null, {length: n}).map(function () {
        return Array.apply(null, {length: n}).map(function () {
            return 0;
        });
    });
}
document.write('<pre>' + JSON.stringify(makeBoard(5), 0, 4) + '</pre>');

答案 2 :(得分:0)

您生成一个数组,然后在其中循环新数组。像这样:

var arr = new Array(10);
for (var i = 0; i < 10; i++) {
  arr[i] = new Array(6);
}