Javascript使用for循环将值推送到多维数组

时间:2015-08-02 15:22:02

标签: javascript arrays multidimensional-array nested

我是Javascript的新手,并尝试为课程整理棋盘。我必须用黑色和红色的棋子设置棋盘(即前三行为红色,最后三行为黑色,其他每块都有一个棋子),我有点卡住了。我尝试了下面的代码,这只会导致var checkers数组中的每个值打印为null,然后是四个'B's。我想我需要以某种方式将数组的多维度合并到我的for循环中,但我不知道该怎么做。非常感谢任何指导或帮助!

var checkerboard = [[null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null]];


function setUpRed(square) {
    return (square = 'R');
}

for (var i = 0; i < checkerboard [3][7]; i += 2 ) {
    checkerboard.push(setUpRed(checkerboard[i]));
}

function setUpBlack(square) {
    return (square = 'B');
}

for (var i = (checkerboard.length - 1); i > checkerboard [6][0]; i -= 2) {
    checkerboard.push(setUpBlack(checkerboard[i]));
}

console.log(checkerboard);

4 个答案:

答案 0 :(得分:1)

这是你在找什么?

for(var i = 0; i < 3; i++){
 for(var j = 0; j < row.length; j++){
   checkerboard[i][j] = "RED"
 }  
}

for(var i = allrows - 3; i < 3; i++){
 for(var j = 0; j < row.length; j++){
   checkerboard[i][j] = "BLACK"
 }  
}

如果您已经定义了棋盘,则不应该推送项目..

答案 1 :(得分:0)

var checkerboard = [[null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null]];


for(var i = 0; i < 3; i++){
  for(var j = 0; j < 8; j+=2){
    if (i % 2) checkerboard[i][j] = "R";
    else checkerboard[i][j+1] = "R";
  }  
}

for(var i = checkerboard.length - 3; i < checkerboard.length ; i++){
  for(var j = 0; j < 8; j+=2){
    if (i%2) checkerboard[i][j] = "B";
    else checkerboard[i][j+1] = "B";
  }  
}

console.log(checkerboard);

我认为你希望这看起来像一个使用棋子的常规棋盘。这就是你要做的。

答案 2 :(得分:0)

首先,你的'for'条件是错误的。

在第一个循环中,测试i&lt;棋盘[3] [7]。换句话说,你正在测试我是否&lt; null,总是false(因为JS中的null == 0)因此,你永远不会进入这个循环。

在第二个循环中,您测试i&gt;棋盘[6] [0]。换句话说,你正在测试我是否&gt; null(与i> 0相同)。另外,用i =(checkerboard.length - 1)初始化它,这意味着矩阵的最后一个(长度指的是包含行的顶级数组)。考虑到你每次迭代减去2次,你将在这里迭代4次。

其次,您正在将值推入已填充的数组中。这将添加元素而不是覆盖您想要的位置。对于覆盖,您必须通过索引(行和列,2维)直接写入所需位置。

所以,解决方案是:

for(var i = 0; i < 3; i++){
 for(var j = 0; j < checkerboard[i].length; j+=2){
   checkerboard[i][j] = "R";
 }  
}

for(var i = checkerboard.length - 1; i > checkerboard.length - 3; i--){
 for(var j = 0; j < checkerboard[i].length; j+=2){
   checkerboard[i][j] = "B";
 }  
}

这只是代码的初始修复。您还需要在备用行中移动起始位置以获得正确的板。

答案 3 :(得分:0)

以下代码将正确设置两个玩家并说明每个玩家的中间行偏移量。

http://repl.it/agR/3344

var checkerboard = [[null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null],
                    [null,null,null,null,null,null,null,null]];

function setSquare(player, row, col) {
    checkerboard[row][col] = player;
}

function getPieceAt(row, col) {
    console.log(checkerboard[row][col] || 'null');
}

function clearBoard() {
    for (i = 0; i < checkerboard.length; i++) {
        checkerboard[i][i] = null;
    }
}

function setUpRed() {
    for (row = 0; row < 3; row++) {
        if ((row === 0) || (row === 2)) {
            for (col = 0; col < checkerboard[row].length; col += 2) {
            checkerboard[row][col] = "R";   
            }
        }
        else {
            for (col = 1; col < checkerboard[row].length; col += 2) {
            checkerboard[row][col] = "R";
            }
        }
    }
}

function setUpBlack() {
    for (row = 5; row < 8; row++) {
        if ((row === 5) || (row === 7)) {
            for (col = 1; col < checkerboard[row].length; col += 2) {
            checkerboard[row][col] = "B";   
            }
        }
        else {
            for (col = 0; col < checkerboard[row].length; col += 2) {
            checkerboard[row][col] = "B";
            }
        }
    }
}

setUpRed();

setUpBlack();

console.log(checkerboard);