我有一个of对象,包含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元素?
任何帮助都将不胜感激,谢谢.
发布于 2013-09-13 05:57:19
当您在循环数组时修改数组大小时,需要在执行过程中调整当前索引。在您的情况下,无论何时您剪接一个项目,您需要--i;。这将使索引备份一个,而不会导致循环跳过项。
发布于 2013-09-13 06:01:37
这是因为您使用items.length来决定循环的迭代,并在循环中删除它,这会在每次删除的迭代中更改长度。您可以在循环中操作数组的副本,然后在原始循环中替换它。
就像这样
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;发布于 2013-09-13 06:01:45
首先,查找要删除的元素的索引:
var array = [2, 5, 9];
var index = array.indexOf(5);然后用剪接把它拿掉:
if (index > -1) {
array.splice(index, 1);
}拼接的第二个参数是要删除的元素数。注意,splice对数组进行了适当的修改,并返回一个包含删除元素的数组。
https://stackoverflow.com/questions/18779161
复制相似问题