无法在javascript中删除数组

时间:2013-09-13 05:50:30

标签: javascript arrays

我有一个对象,包含5个元素。

现在我循环删除与我的条件匹配的元素。

for(var i = 0; i < items.length ; i++){
  console.log(i + '-'); //the result is 3-4
  if(_today.getTime() - items[i].timestamp >= numDay * ONE_DAY){
     console.log(i); //the result is 3
     items.splice(i,1);
  }
}

我的阵列示例:

[{"DepartmentID":56,"CategoryID":117,"BrandID":19,"ID":707},
 {"DepartmentID":56,"CategoryID":117,"BrandID":19,"ID":708},
 {"DepartmentID":56,"CategoryID":117,"BrandID":19,"ID":709},
 {"DepartmentID":56,"CategoryID":117,"BrandID":19,"ID":710},
 {"DepartmentID":56,"CategoryID":117,"BrandID":19,"ID":711}]

只删除此for loop中的一个元素。  是因为问题索引还是如何删除与此循环中的条件匹配的n元素?

非常感谢任何帮助,谢谢..

4 个答案:

答案 0 :(得分:2)

在循环时修改数组大小时,需要随时调整当前索引。在您的情况下,每当您拼出一件物品时,您需要--i;。这会将索引备份一个,而不会导致循环跳过一个项目。

答案 1 :(得分:0)

这是因为您使用items.length来决定循环的迭代并在循环内删除它,这会在您删除的每次迭代中更改长度。您可以在循环内操作数组的副本,然后在orignal中替换它。

像这样的东西

var temp = items;

for(var i = 0; i < items.length ; i++){
  console.log(i + '-'); //the result is 3-4
  if(_today.getTime() - items[i].timestamp >= numDay * ONE_DAY){
     console.log(i); //the result is 3
     temp.splice(i,1);
  }
}

items= temp;

答案 2 :(得分:0)

首先,找到要删除的元素的索引:

var array = [2, 5, 9];
var index = array.indexOf(5);

然后用拼接将其移除:

if (index > -1) {
    array.splice(index, 1);
}

splice的第二个参数是要删除的元素数。注意,splice修改了数组并返回一个包含你删除的元素的数组

答案 3 :(得分:0)

我在其中一个jQuery插件的源代码中找到了这个解决方案。 items.splice(i--, 1);似乎更简单。这仅适用于从阵列中一次删除一个项目

的情况
for(var i = 0; i < items.length ; i++){
  if(_today.getTime() - items[i].timestamp >= numDay * ONE_DAY){
     items.splice(i--, 1);
  }
}