当数组长度= 0时,它仍然显示为1

时间:2013-06-07 20:02:48

标签: javascript arrays array-splice

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

这是一个例子,我在'player'数组中有一个对象:

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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

如果要使用player从数组.splice中删除第一个元素,可以执行以下操作:

player.splice(0, 1);

答案 2 :(得分:0)

是的,想一想这个,我打赌如果你改变这一行它会起作用:

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

player.splice((id),1);

答案 3 :(得分: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?