使用嵌套数组的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() + ")");
}
}
}
答案 0 :(得分:6)
当indexOf
在嵌套数组中找到"Player"
时,循环不会停止。它将继续循环,从而在每次迭代时覆盖playerY
的值。要解决此问题,我们必须在break
找到字符串时indexOf
:
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"
}
}
答案 1 :(得分:0)
您的问题是playerY
每个map
元素都会被评估,并且由于最后一个元素与"Player"
不匹配,因此您的最终结果为-1
。< / p>
在这种情况下基本上就像你在测试一样:
var playerY = map[2][2].indexOf("Player");
由于该元素为"Blank"
,因此会返回-1