JavaScript删除不会删除所需的属性

丹尼尔·奥利维拉(Daniel Oliveira)

我正在使用nodejs来创建游戏。碰巧这次我无法使用Delete。它不起作用,我也不知道为什么。

我执行这一行:

delete Bullet.list[i]

并且Bullet.list是具有属性的对象,执行此行后,所需的属性不会被删除。

这是我的代码(您可以在下面的上下文中看到以上代码行):

var Map = require("./Map.js")
var Player = require("./Player.js");
var Bullet = require("./Bullet.js");
var Fly = require("./Fly.js");
var Settings = require("./Settings.js");

var Simulation = function(SOCKET_LIST){ 

//Update Bullets
for(var i in Bullet.list){
    var bullet = Bullet.list[i];
    bullet.update();

    var shooter = Player.list[bullet.parent];       
    //Bullets collide with flies
    for(var i in Fly.list){
        var fly = Fly.list[i];
        if(!bullet.toRemove && bullet.getDistance(fly) < 15){
            if(shooter){
                shooter.updateCoins(fly.killCoins);
                shooter.updateXp(fly.killXp);
            }
            bullet.toRemove = true;
            fly.toRemove = true;
        }
    }
    //Collide with player
    for(var i in Player.list){
        var player = Player.list[i];
        if(player.death) continue;
        if(!bullet.toRemove && bullet.getDistance(player) < 32 && shooter !== player.id && shooter.team != player.team && !player.immune){
            player.hp -= 1;
            player.hpChanged = true;
            if(player.hp <= 0){
                if(shooter)
                    player.kill(shooter);
                else
                    player.kill();
            }
            bullet.toRemove = true;
        }
    }
    //Collide with map
    if(typeof shooter == "undefined" || shooter.shootsCollideMap && Map.isColliding(bullet))
        bullet.toRemove = true;

    //Remove bullets
    if(bullet.toRemove){
        delete Bullet.list[i]; /*HERE IS THE PROBLEM. THE PROPERTY IS NOT BEING DELETED*/
        Bullet.removePack.push[bullet.id];
    }

}

我无法从对象Bullet.list中删除属性“ i”。

jfriend00

您的三个for循环都共享同一个变量i,因此您没有删除i想要索引。这是因为var i函数是作用域的,而不是作用于单个for循环的作用域

执行此操作时:

delete Bullet.list[i];

ii上一个for循环之后的值,可能不是您实际要删除的项目。也许您的意思是for事先打破循环,以便i将其作为要删除的特定项目?

或者,您需要将要删除的项目的索引单独保存到另一个变量。或者,仅for当循环的值为icurrent时才删除循环中的一个项目

请记住,这var是函数范围的。因此var i,两个嵌套for循环中的两个声明实际上都引用了完全相同的变量,而不是声明一个新变量。我建议将两个循环之一中的循环索引的名称更改为一个单独的变量。

如果您在let完全受支持的环境中运行,则可以使用let i代替,var i然后的值i将唯一地限定在仅for声明它循环中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章