如何通过迭代对象数组来删除某些项目

How to remove some items by iterating over the array of objects?

本文关键字:删除 项目 数组 何通过 迭代 对象      更新时间:2023-09-26

我想遍历对象数组并根据某些条件删除其中一些。

我使用拼接来移除项目,以保持有序的项目计数。

然后每次删除该项目时,我都会减少计数。

但由于某种原因,它永远不会起作用:

var arr=[{img:1},{img:2},{img:3},{img:4}];
for (var i=0, count= arr.length; i < count; ) {
    if ( this.arr[i].img==3 ) {
        this.arr.splice(i,1);
        count--;
    }else  i++
};
alert(JSON.stringify(arr));

...有什么想法吗?

向后循环应该可以解决问题。这样可以避免在删除由于"撤退"值而删除条目时使用计数器和重置计数器。

var i;
for (i = arr.length; i--;) {
    if (arr[i].img === 3) {
        arr.splice(i, 1);
    }
};

向后循环数组更简单,因此您不必调整迭代器:

var i = arr.length;
while ( i-- ) {
  if ( arr[i].img == 3 ) {
    arr.splice(i,1);
  }
}

我以前也遇到过同样的困难。我的解决方案是遍历数组并组成另一个要删除的元素数组。反向循环浏览要删除的元素列表并删除它们。这对我来说效果很好。

迈克尔·

你指的是this.arr,而不仅仅是arr

从代码中删除两个this.,它就可以工作了。

尝试这个循环,我还没有测试过,但应该可以工作。

var arr=[{img:1},{img:2},{img:3},{img:4}];
for (var i=arr.length-1; i >= 0; i--) {
    if ( arr[i].img==3 ) {
        arr.splice(i,1);
    }
};
alert(JSON.stringify(arr));