在javascript中从数组中删除

在javascript中从数组中删除,javascript,Javascript,3小时前,我在SO中提出了一个关于删除对象的一部分的问题,因此我将此问题与之关联: 但现在,当我从该数组中删除时,出现了另一个问题。 我使用该对象填充FlexGrid。但是,当我按照下面的代码从该对象中删除一个项目时,它并没有删除该项目,而是设置为未定义:(并且FlexGrid不接受它作为输入数据) for (var i = 0; i < Roomdata.length; i++) { if(Roomdata[i].id = X) { delete Roomd

3小时前,我在SO中提出了一个关于删除对象的一部分的问题,因此我将此问题与之关联:

但现在,当我从该数组中删除时,出现了另一个问题。 我使用该对象填充FlexGrid。但是,当我按照下面的代码从该对象中删除一个项目时,它并没有删除该项目,而是设置为未定义:(并且FlexGrid不接受它作为输入数据)

for (var i = 0; i < Roomdata.length; i++) {

    if(Roomdata[i].id = X) {

        delete Roomdata[i];
        break;

    }
}                
当我调用此代码删除item2时,Roomdata对象如下所示:

{item1, item2, item3}
{item1, undefined, item3}
这是一种不好的格式,FlexGrid可以接受它作为输入数据

有什么解决办法吗

谢谢大家,很抱歉我的语法不好(我是英语新手)


关于,例如,您拥有的是一个数组。您应该使用从数组中删除元素,而不是通过
删除该元素

for (var i = 0; i < Roomdata.length; i++) {

    if(Roomdata[i].id = X) {

        Roomdata.splice(i, 1);
        break;

    }
}  
for(var i=0;i
按相反顺序遍历阵列,然后使用
.splice
移除元素。
您必须按相反的顺序行走,否则将跳过元素,请参见下文

如果不按相反的顺序行走,会发生什么情况:

// This happens in a for(;;) loop:
// Variable init:
var array = [1, 2, 3];
var i = 0;

array.splice(i, 1); // array = [2, 3]   array.length = 2
// i < 2, so continue
i++;  // i = 1    

array.splice(i, 1); // i=1, so removes item at place 1: array = [2]
// i < 1 is false, so stop.

// array = [2]. You have skipped one element.
//这在for(;;)循环中发生:
//变量初始化:
var数组=[1,2,3];
var i=0;
array.splice(i,1);//array=[2,3]array.length=2
//i<2,继续
i++;//i=1
splice(i,1);//i=1,因此删除位置1处的项:array=[2]
//i<1为假,因此停止。
//数组=[2]。您跳过了一个元素。

尽管删除,但仍使用拼接

 Roomdata.splice(i, 0);
“拼接”属性删除空白字符串元素、未定义的引用、空值和假值


它将解决您的问题

可能重复的--请在提问之前使用搜索。您先前问题的公认答案已经建议使用
splice
。您为什么再次问这个问题?抱歉@Felix,但我想,因为我已经问了一个关于这个问题的问题,所以我问这个问题是为了帮助读者让我们读一读更容易理解的问题,无论如何,对不起that@FelixKling,因为我用了那个答案,但它不起作用,但我用他的想法来解决我的问题,所以我接受了它,不是因为他的答案是正确的,而是因为他的答案给了我一个答案idea@Rob:重复答案显示了如何从数组中删除元素,这是问题所在。我知道不要认为我们必须对每个解决方案都进行详细的填鸭式输入。另请参阅我对您答案的评论。第二个参数指定必须删除多少项。
.splice(i,0)
不会删除任何内容。即使您将其替换为
.splice(i,1)
,您跳过元素是因为没有考虑更改的索引。@RobW:哎呀。至于跳过元素,他在删除的时候就中断了,所以不会跳过任何内容。谢谢您的完整回复及其评论,不管怎样,您帮了我,您很好,再次感谢您不必按相反的顺序遍历元素无论如何,在调用
splice
后终止循环。如果要从数组中删除多个元素,那么是的,但在这种情况下不需要。@FelixKling你是对的。但是,由于在另一个问题上接受的答案不起作用,我假设必须删除
break;
。@RobW,是的,这是因为我想删除它只要删除一个项目和breke循环,我就可以正常地遍历它:)应该是
if(Roomdata[i].id==X){
吗?
 Roomdata.splice(i, 0);