Javascript 当数组长度=0时,仍显示为1
我正在处理一个数组,我想从中删除一个对象并返回数组的新长度。对于所有其他数字,它都有效——但对于一个项目,它不起作用。不确定如何修复它,以便在删除唯一对象后数组长度为0。我的代码如下: 下面是一个示例,其中“玩家”数组中有一个对象:Javascript 当数组长度=0时,仍显示为1,javascript,arrays,array-splice,Javascript,Arrays,Array Splice,我正在处理一个数组,我想从中删除一个对象并返回数组的新长度。对于所有其他数字,它都有效——但对于一个项目,它不起作用。不确定如何修复它,以便在删除唯一对象后数组长度为0。我的代码如下: 下面是一个示例,其中“玩家”数组中有一个对象: function deletecamera(id){ alert('before the splice, player length =' + player.length); //returns 1 delete player.splice((id
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();
}
功能删除摄像头(id){
alert('在拼接之前,player length='+player.length);//返回1
删除player.splice((id),1);
i=0;
对于(i=0;i是的,再仔细考虑一下,我打赌如果你改变这一行,它会起作用:
delete player.splice((id),1);
到
那里有一些奇怪的代码
JS中的数组是一个可以容纳多个[元素]的对象
。但就像任何其他JS对象一样,只需说出myArrayName.someMemberName=something
,就可以向其添加更多成员。这不会像元素一样“在”数组中。这甚至是JS poor mans的“关联数组”方式。这就是您现在使用.id=…
你需要改变
player.id = i;
变成
player[i].id = i;
(或者类似的东西。不知道目标是什么。我猜你想在删除中间的一个Id后重新排序所有Id。)
此外,将拼接
行更改为:
player.splice(id,1);
并仅使用以下命令删除多余的行:
i=0;
但我现在意识到这些都是提示,但并不能解决你的问题。
你能补充一下吗
alert('trying to remove id ' + id);
并确认您至少尝试删除id 0一次?关键字delete
不会从数组中删除对象,它会将其值设置为undefined
,因此数组的大小保持不变。
请参见此处的示例:如果要使用.splice
从阵列播放器中删除第一个元素,可以执行以下操作:
player.splice(0, 1);
为什么在拼接功能中有(id)
?拼接不是()吗执行删除操作?wtf是“delete”在那里执行操作?是源于代码原型吗?因为这似乎不正确!而且您的for循环与player id也没有意义。如果您想将player-1的长度指定给player.id,只需执行player.id=player.length-1;我应该已经澄清了。id是函数中为d指定的参数elete按钮。如果我的草率冒犯了你,删除表示歉意。这不是草率,你的代码根本没有意义,如果你提供更多的上下文,也许我们可以提供帮助。什么是播放器,它包含什么样的数据,你的函数应该对播放器做什么,id是什么?播放器数组的索引?播放器的属性?此外,您还可以删除id周围的额外参数。但这一切都不会产生任何效果,因为您对拼接结果所做的操作无关紧要。无论您是否将其指定为删除、打印或其他操作。该函数将已运行…无论如何,该代码在删除或不删除的情况下仍然没有意义。问题更多的是为什么会出现这种长度数组的th保持不变。由于删除不会影响拼接操作,所以不会更改任何内容,只会影响拼接的结果。删除原来是无关的。我从现在看来不正确的论坛帖子中获得它。player.splice()很好。谢谢-这很有效。我很感谢你的帮助,即使是我问题中的劣质代码!不。他不想删除第一个元素。他想删除传递的id!这确实会最终清除你的数组,但不会做它应该做的。@nl-x:他似乎很满意,删除id不会减少t他使用了数组长度,所以我坚持使用它。@recursive是的。在对OP的评论中,他说只有当长度只有1时,他才使用这个来做这件事……暗示他实际上没有任何线索。:)但我确实认为你是对的,.id
不会影响.length
:(我会再编辑一次,因为我似乎没有联系到你,我很确定这是你真正的问题。我感谢你的帮助。这很有效。JS远不是我的强项-我不习惯收到这样的负面回复,所以,很抱歉延迟回复。我发誓,我是新的-不愚蠢:-)我再次编辑以反映新的见解。似乎我没有一个确定的解决方案供您选择。谢谢您的努力。在此期间,我将更新我的代码以反映更正,我将继续努力。如果我找到解决方案,我将在这里发布。谢谢!
player.splice(0, 1);