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