试图在Javascript multi-dim数组中传递值

时间:2016-01-28 01:58:22

标签: javascript arrays

所以,我正在构建一个网站,您可以将其作为代码示例播放othello。我有一个多维数组作为幕后游戏板,然后遍历表中的每个'td'以匹配相应数组成员的值。我遇到的问题是迭代表。并使用迭代器作为我的数组的基本坐标是行不通的。随着迭代器值的增加,我每个'td'中的坐标也越来越多。我很难过,并冒烟。任何帮助将不胜感激。

function gridArray() {
    // creates game board's array.  
    for (var i = 0; i < gameArray.length; i++) {
        gameArray[i] = new Array(8);
    }

    for (var row = 0; row < gameArray.length; row++) {
        for (var col = 0; col < gameArray[row].length; col++) {
            gameArray[row][col] = "green";
        }
    }
}

function drawGrid(){
    // writes table to HTML document
    var htmlString = "<table id='othelloGrid'><tr>";
        for (var i = 0; i < 8; i++) {
            htmlString += "<th>" + i + "</th>";
        }
        htmlString += "</tr>";
        for (var j = 0; j < 8; j++) {
            htmlString += "<tr>";
            xPos = j;
            for (var x = 0; x < 8; x++) {
                yPos = x;
                // HERE!!!  I now realize javascript passes by reference, so      as this loop iterates, 
                // every single 'td' is getting 'onclick = 'changeClass(7, 7)''.
                // for my game grid to work, I need each td to have a unique xPos, yPos to
                // connect back to gameArray.
                htmlString += "<td onclick = 'changeClass(xPos, yPos)'></td>";
            }
            htmlString += "</tr>";
        }
    htmlString += "</table>";

    return htmlString;
}

1 个答案:

答案 0 :(得分:3)

变量不会在字符串内扩展。所以你的所有TD都有文字属性onclick='changeClass(xPos, yPos)',而不是循环中这些变量的值。因此,当您实际点击它们时,它们都会使用这些变量的最新值。

您需要使用字符串连接来获取值。并且不需要全局变量xPosyPos,您可以使用本地jx变量。

htmlString += "<td onclick = 'changeClass(" + j + ", " + x + ")'></td>";