在javascript中从数组中删除
3小时前,我在SO中问了一个关于删除一个对象的一部分的问题,所以我将这个问题与它联系起来:
在javascript中删除一部分对象
但是现在当我从该数组中删除时出现了另一个问题。 我使用该对象来填充FlexiGrid。 但是当我通过下面的代码从该对象中删除一个项目时,而不是删除该项目,它将设置为undefined :(并且flexigrid不接受它用于输入数据。
for (var i = 0; i < Roomdata.length; i++) {
if(Roomdata[i].id = X) {
delete Roomdata[i];
break;
}
}
例如,假设我在Roomdata中有3个项目,如下所示:
{item1, item2, item3}
当我调用这段代码删除item2时,Roomdata对象看起来像这样:
{item1, undefined, item3}
这是flexigrid作为输入数据接受的不好的格式
有没有解决方法?
感谢每一个机构,并对我的糟糕语法感到抱歉(我是英语新手)
问候,Foroughi
以相反的顺序遍历数组,并使用.splice
删除元素。
你必须按照相反的顺序走,否则你最终会跳过元素见下文。
for (var i = Roomdata.length-1; i >= 0; i--) {
if (Roomdata[i].id == X) {
Roomdata.splice(i, 1);
break;
}
}
如果你不以相反的顺序行走会发生什么:
// 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.
你有什么是一个数组 。 您应该使用splice()
方法从数组中删除元素,而不是通过delete
元素。
for (var i = 0; i < Roomdata.length; i++) {
if(Roomdata[i].id = X) {
Roomdata.splice(i, 1);
break;
}
}
尽管有删除,仍然使用拼接。
Roomdata.splice(i, 0);
拼接属性删除空白字符串元素,未定义的引用,NULL和FALSE。
它会解决你的问题
链接地址: http://www.djcxy.com/p/17651.html