-1

我正在处理一个数组,我想从中删除一个对象并返回数组的新长度。对于所有其他数字,它都有效 - 但对于一个项目,它不起作用。不知道如何修复它,以便在删除唯一对象后数组长度为 0。我的代码如下:

这是一个示例,其中我在“玩家”数组中有一个对象:

function deletecamera(id){
    alert('before the splice, player length =' + player.length); //returns 1

    delete player.splice((id),1);
    i=0;
    for (i=0;i<player.length;i++){
        player.id=i;
    }

    alert('after reassigning, player length =' + player.length); // still returns 1?!
    refreshlist();
}
4

4 回答 4

3

delete关键字不会从数组中删除对象,它会将其值设置为undefined,因此数组的大小保持不变。请参阅此处的示例:http: //jsfiddle.net/up5XX/

于 2013-06-07T20:10:54.393 回答
2

如果要使用 删除数组中的第一个元素player.splice可以这样做:

player.splice(0, 1);
于 2013-06-07T20:15:51.783 回答
0

是的,再想一想,我敢打赌,如果你改变这条线,它会起作用:

delete player.splice((id),1);

player.splice((id),1);
于 2013-06-07T20:09:28.717 回答
0

那里有一些奇怪的代码。

JS 中的数组是一个可以容纳多个[elements]. 但就像任何其他 JS 对象一样,您只需说 . 就可以向它添加更多成员myArrayName.someMemberName = something。这不会像一个元素一样“在”数组中。这甚至是“关联数组”的 JS 穷人方式。这就是你现在正在做的.id = ...

你需要改变

player.id = i;

变成类似的东西

player[i].id = i;

(或类似的东西。不知道那里的目标是什么。我猜你想在删除中间的一个之后重新排序所有 ID。)

此外...将splice行更改为:

player.splice(id,1);

并删除多余的行:

i=0;

但是我现在意识到这些都是技巧,但不能解决您的问题。你能补充一下吗

alert('trying to remove id ' + id);

并确认您至少尝试删除 id 0 一次?

于 2013-06-07T20:10:08.780 回答