Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当数组长度=0时,仍显示为1_Javascript_Arrays_Array Splice - Fatal编程技术网

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

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

我正在处理一个数组,我想从中删除一个对象并返回数组的新长度。对于所有其他数字,它都有效——但对于一个项目,它不起作用。不确定如何修复它,以便在删除唯一对象后数组长度为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();
}
功能删除摄像头(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);