首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法删除javascript中的数组

无法删除javascript中的数组
EN

Stack Overflow用户
提问于 2013-09-13 05:50:30
回答 4查看 70关注 0票数 0

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

现在,我循环遍历要删除的元素,这些元素与我的条件相匹配。

代码语言:javascript
复制
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);
  }
}

我的数组的样本:

代码语言:javascript
复制
[{"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元素?

任何帮助都将不胜感激,谢谢.

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-13 05:57:19

当您在循环数组时修改数组大小时,需要在执行过程中调整当前索引。在您的情况下,无论何时您剪接一个项目,您需要--i;。这将使索引备份一个,而不会导致循环跳过项。

票数 2
EN

Stack Overflow用户

发布于 2013-09-13 06:01:37

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

就像这样

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2013-09-13 06:01:45

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

代码语言:javascript
复制
var array = [2, 5, 9];
var index = array.indexOf(5);

然后用剪接把它拿掉:

代码语言:javascript
复制
if (index > -1) {
    array.splice(index, 1);
}

拼接的第二个参数是要删除的元素数。注意,splice对数组进行了适当的修改,并返回一个包含删除元素的数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18779161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档