我正在处理一个数组,我想从中删除一个对象并返回该数组的新长度。对于所有其他数字,它可以工作 - 但对于一个项目,它没有。不确定如何修复它,以便在删除唯一对象后数组长度为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();
}
答案 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?