尝试在Javascript多维数组中按值传递

尝试在Javascript多维数组中按值传递,javascript,arrays,Javascript,Arrays,所以,我正在建立一个网站,你可以在上面玩奥赛罗作为一个代码示例。我有一个多维数组作为幕后游戏板,然后遍历表中的每个“td”,以匹配相应数组成员的值。我遇到的问题是遍历表。使用迭代器作为数组的基本坐标是行不通的。随着迭代器值的增加,我的每个“td”中的坐标也会增加。我被难倒了,而且还在冒烟跑。任何帮助都将不胜感激 function gridArray() { // creates game board's array. for (var i = 0; i < gameAr

所以,我正在建立一个网站,你可以在上面玩奥赛罗作为一个代码示例。我有一个多维数组作为幕后游戏板,然后遍历表中的每个“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;
}
函数gridArray(){
//创建游戏板的数组。
对于(var i=0;i
变量不会在字符串中展开。因此,所有的TDs中都有literal属性
onclick='changeClass(xPos,yPos)
,而不是循环中这些变量的值。所以当你点击它们时,它们都会使用这些变量的最新值

htmlString += "<td onclick = 'changeClass(" + j + ", " + x + ")'></td>";
您需要使用字符串连接来获取值。而且不需要全局变量
xPos
yPos
,您可以使用局部
j
x
变量

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

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

htmlString += "<td onclick = 'changeClass(" + j + ", " + x + ")'></td>";
您需要使用字符串连接来获取值。而且不需要全局变量
xPos
yPos
,您可以使用局部
j
x
变量

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

我发现在某些情况下,使用xval/yval作为TD参数会有所帮助。因此,当你点击一个单元格时,你总是可以查询
$(this).attr('xval')
$(this).attr('yval')
,这将返回表上的位置(从而消除迭代的需要)。@AlbertoAlexanderRodriguez我就是这样做的,尽管你不应该创建这样的自定义属性。使用
数据xval
哦,上帝保佑你。我需要睡眠。我通常添加自定义属性以避免不必要的迭代。越多越好。为什么要使用自定义属性而不是使用标准的
dataxxx
属性?例如,
data xval=“123”
我发现在某些情况下,使用xval/yval作为TD参数会有所帮助。因此,当你点击一个单元格时,你总是可以查询
$(this).attr('xval')
$(this).attr('yval')
,这将返回表上的位置(从而消除迭代的需要)。@AlbertoAlexanderRodriguez我就是这样做的,尽管你不应该创建这样的自定义属性。使用
数据xval
哦,上帝保佑你。我需要睡眠。我通常添加自定义属性以避免不必要的迭代。越多越好。为什么要使用自定义属性而不是使用标准的
dataxxx
属性?例如,
data xval=“123”