javascript - 嵌套循环有问题

标签 javascript nested-loops

当运行 moveRight() 函数时,我收到一个错误,它无法识别 map[x][y],说它是未定义的。仅当“玩家”处于最后一个 y 循环时才会发生这种情况。我不明白为什么会发生这种情况,有人可以帮忙解释一下吗?

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

function moveRight() {
    var breakLoop = false;
    for (y = 0; y < map.length; y++) {
        for (x = 0; x < map[y].length; x++) {

            var posX = map[x][y].indexOf("Player");
            if (posX <= -1) continue;
            if (y >= map[y].length-1) {
                breakLoop = true;
                break;
            }

            breakLoop = true;
            console.log("x: " + x);
            console.log("y: " + y);

            map[x][y] = "Blank";
            map[x][y+1] = "Player"; 
            break;
        }
        if (breakLoop) break;
    }
}

最佳答案

你用 y 编写循环的方式在外循环和 x里面的 map 需要通过y访问首先,然后x .

var posX = map[y].indexOf("Player");

然后是y边界检查应该检查 x ,这是有道理的,因为这是水平移​​动。

if (x >= map[y].length - 1) {

移动线应该是:

map[y][x] = "Blank";
map[y][x+1] = "Player"; 

此外,最好添加 var到您的局部变量声明中,这样它们就不会泄漏到全局范围中。

for (var y = 0; y < map.length; y++) {
    for (var x = 0; x < map[y].length; x++) {

最后,看起来您不需要内部循环。您正在使用 indexOf 搜索每一行因此无需遍历行中的每个单独的方 block 。这意味着posX可以变成x .


应用所有这些想法,这是最终的代码。请注意,一些仔细的重构如何让我们摆脱 breakLoop也是变量。

for (var y = 0; y < map.length; y++) {
    var x = map[y].indexOf("Player");

    if (x <= -1) {
        continue;
    }

    if (x < map[y].length - 1) {
        console.log("x: " + x);
        console.log("y: " + y);

        map[y][x]     = "Blank";
        map[y][x + 1] = "Player"; 
    }

    break;
}

关于javascript - 嵌套循环有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15794498/

相关文章:

php - Foreach 两个循环文本字段,可能吗?

javascript - 卡片翻转游戏 JavaScript 的隐藏样式可见性

c++ - 在OpenMP C++中并行化许多嵌套的for循环

java - 如何按字典顺序循环特定长度的所有可能 vector ?

javascript - 使用 Node 和 React 进行基本文件上传

python - 高效算法而不是循环

java - 嵌套循环模式

javascript - jQuery .Ajax() 函数选择器,将特定数据存储在变量中

javascript - 切换表 :not first column 的显示

Javascript:对象数组的哈希(使用扑克牌示例)