1

将 Array 方法与嵌套数组一起使用时遇到问题。

var map = [
        ["Blank", "Blank", "Blank"],
        ["Blank", "Player", "Blank"],
        ["Blank", "Blank", "Blank"]
];

for (i=0; i<map.length; i++) {
        for (j=0; j<map[i].length; j++) {
            var playerY = map[i][j].indexOf("Player");
        }
}

console.log(playerY);

这将始终记录-1,这是我知道的错误。虽然我认为我的问题是使用嵌套数组。这也可能是我使用 .indexOf() 的方式或循环遍历数组的方式的问题。谢谢你的帮忙。任何建议将不胜感激!:)

编辑:感谢您的所有帮助。我最终改变了很多东西,而不是一起使用 .indexOf() 方法。这就是我最终要做的。

var map = [
        ["Blank", "Blank", "Blank"],
        ["Blank", "Player", "Blank"],
        ["Blank", "Blank", "Blank"]
];

for (x = 0; x < map.length; x++) {
    for (y = 0; y < map[x].length; y++) {
        if (map[x][y] == "Player") {
            console.log("(" + x.toString() + ", " + y.toString() + ")");
        }
    }
}
4

2 回答 2

6

当在嵌套数组中indexOf找到时,循环不会停止。"Player"它将继续循环,因此playerY每次迭代都会覆盖 的值。为了解决这个问题,我们必须breakindexOf找到字符串时:

for (i = 0; i < map.length; i++) {
    for (j = 0; j < map[i].length; j++) {
        var playerY = map[i][j].indexOf("Player");

        if (playerY > -1) break; // We have found "Player"
    }
}
于 2013-04-01T18:07:20.903 回答
0

您的问题是playerY针对每个元素进行评估map,并且由于最后一个元素不匹配"Player",因此您的最终结果是-1.

基本上在这种情况下就像你在测试这个:

var playerY = map[2][2].indexOf("Player");

既然那个元素是"Blank",它会返回-1

于 2013-04-01T18:07:28.487 回答