【问题标题】:'if' does not work while iterating over array in 'foreach' javascript在'foreach' javascript中迭代数组时'if'不起作用
【发布时间】:2021-02-24 02:22:00
【问题描述】:

你好,我用 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

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

【问题讨论】:

    标签: javascript arrays canvas foreach


    【解决方案1】:

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

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

    【讨论】:

    • 使用 for 循环,如果使用 entity.push 也不起作用。有了map(),我什至无法想象如何实现它,尤其是因为我不需要新的数组。
    • 刚刚刷新页面,看到了变化。使用 for 循环,如果使用 entity.push 也不起作用。有了map(),我什至无法想象如何实现它,尤其是因为我不需要新的数组。更改推送有所帮助,但目前如果触发的事件立即出现在 PlayerYpos 上的坑和实体。其余的都正常
    • 尝试将 forEach 替换为 map,看看是否有帮助?
    • 我用 map () 重写了它,它工作了。我应该如何处理它创建的新数组?
    • 非常感谢!)我试图给你评分,但他们不给我。对不起
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    相关资源
    最近更新 更多