更改数组中早期值的Javascript

更改数组中早期值的Javascript,javascript,arrays,splice,Javascript,Arrays,Splice,我正在创建一个在画布上随机显示圆圈的游戏。圆圈对象被添加到一个数组中,每当玩家与其中一个对象发生碰撞时,我都希望移除该对象。这是我目前处理冲突的代码- for(var i = 0; i < currentGame.items.length; i++) { if (player1.x < currentGame.items[i].x + currentGame.items[i].radius*2 && player1.x + curre

我正在创建一个在画布上随机显示圆圈的游戏。圆圈对象被添加到一个数组中,每当玩家与其中一个对象发生碰撞时,我都希望移除该对象。这是我目前处理冲突的代码-

    for(var i = 0; i < currentGame.items.length; i++)
    {
        if (player1.x < currentGame.items[i].x + currentGame.items[i].radius*2  && player1.x + currentGame.items[i].radius*2  > currentGame.items[i].x &&
                player1.y < currentGame.items[i].y + currentGame.items[i].radius*2 && player1.y + player1.car.height > currentGame.items[i].y) {
            currentGame.score++;
            position = currentGame.items.indexOf(i);
            currentGame.items.splice(position, 1);
        }
    }
项目存储在此处(为了清晰起见,我删除了此对象中的所有其他内容)——


修改正在循环的数组时,遇到问题是很常见的

例如,如果在位置
i
处删除项目,则后面的项目将向左移动,因此下一个项目现在将位于位置
i
,但由于循环的下一次迭代检查
i+1
,因此该项目将被跳过

现在你可以做
i--
拼接后,确保在下一次迭代中检查位置
i
中的新项目,但更简单的解决方案是简单地向后循环。那么,影响列表其余部分的操作将不会成为问题

for(var i = currentGame.items.length; i--; )

无论如何,我关心的是您代码中的其他内容:

        position = currentGame.items.indexOf(i);
我们是否已经知道当前项目的位置是
i
?此
indexOf
在列表中搜索值为
i
的项。我想当
索引of
搜索失败时,
position
将获得值
-1
。我想你真正的意思是:

        var position = i;
最后,如果您不喜欢
console.log
,可以尝试将其放入if块中:

        debugger;

这将在代码中手动设置断点,以便您可以检查变量的值以查看出现了什么问题。您需要打开浏览器的调试器或“开发工具”面板。完成后不要忘记删除该语句

在循环时记录对象,您将看到为什么,现在一切都有意义了,谢谢!这就解决了问题,对于其他一些非联邦代码,您也是正确的。
        var position = i;
        debugger;