在javascript中从数组中删除

Ali*_*ghi 11 javascript

3个小时前,我在SO中提出了一个关于删除对象的一部分的问题,所以我将这个问题与它联系起来:

在javascript中删除对象的一部分

但是现在当我从该数组中删除时出现了另一个问题.我使用该对象来填充FlexiGrid.但是当我通过以下代码从该对象中删除一个项目,而不是删除该项目时,它设置为undefined :(并且flexigrid不接受它用于输入数据.

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

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

        delete Roomdata[i];
        break;

    }
}                
Run Code Online (Sandbox Code Playgroud)

例如,假设我在Roomdata中有3个项目,如下所示:

{item1, item2, item3}
Run Code Online (Sandbox Code Playgroud)

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

{item1, undefined, item3}
Run Code Online (Sandbox Code Playgroud)

这是flexigrid作为输入数据接受的错误格式

有什么解决方案吗?

谢谢每一个人,抱歉我的语法不好(我是英文新手)

问候,Foroughi

Rob*_*b W 54

以相反的顺序遍历数组,并使用.splice删除元素.
你必须以相反的顺序走,否则你最终会跳过元素见下文.

for (var i = Roomdata.length-1; i >= 0; i--) {
    if (Roomdata[i].id == X) {
        Roomdata.splice(i, 1);
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

// 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.
Run Code Online (Sandbox Code Playgroud)

  • 您不必以相反的顺序遍历元素,因为您在调用`splice`之后终止循环.如果要从数组中删除多个元素,则为yes,但在这种情况下不需要它. (2认同)
  • 应该是`if(Roomdata [i] .id === X){`而不是(相等与分配)? (2认同)