我有一个对象,包含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
元素?
非常感谢任何帮助,谢谢..
答案 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);
}
}