首页 > 解决方案 > 在'foreach' javascript中迭代数组时'if'不起作用

问题描述

你好,我用 xPos 和 yPos 创建了 3 个数据数组,并用 foreach 开始迭代它们

ctx.drawImage(Images['car1.png'],
            element.x,
            element.y,
            Images['car1.png'].width * SCALE,
            Images['car1.png'].height * SCALE);
element.y += SPEED * dt
if (PlayerYpos + Images['car3.png'].height * SCALE <= element.y) {
        CountEnd++;
        Entity.splice(index, 1)
        Entity.push({
            x: ~~(Math.random() * (canvas.width - Images['car1.png'].width - Images['car1.png'].width + 1)) + Images['car1.png'].width,
            y: ~~(Math.random() * (-700 - (-400) + 1)) + (-400)
        });
    }

它工作正常,但是当您为创建的数组创建完全相同的代码时,例如 Pit1.png,最后一段代码(应该推送新数据然后绘制)不起作用。我需要以这种方式拍摄 3 张图片。

也许我不知何故犯了一个错误,我需要以完全不同的方式去,但我刚刚开始钻研 js,不明白如何实现更多功能。我只是不明白为什么我不能以这种方式迭代 3 个数组。

如果有人不理解代码段中发生的事情,我会附上一个链接到 hastebin 的完整代码。(pastebin 由于某种原因无法打开)https://hastebin.com/ehitewujix.js

我也将非常感谢代码上的注释。非常感谢。

标签: javascriptarrayscanvasforeach

解决方案


特别是对于您的代码,我认为错误出现在第 162 和 163 行,其中 Entity 应更改为 Pit(Pit.splice 和 Pit.push)。因为,正如我假设您正在 forEach 循环通过 Pit,因此想要修改这些行上的 Pit 数组。

然而,另一方面,我发现使用 map() 而不是 forEach() 更不容易出错/更容易调试。map() 稍微快一点,可以做所有 forEach() 可以做的事情,但也可以返回结果,而 forEach 不能(即使它允许您在其回调函数中写入返回值):https ://morioh.com /p/b2d058745cb8


推荐阅读