2

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

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

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

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

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));

​ ...有什么想法吗?

4

5 回答 5

2

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

var i;
for (i = arr.length; i--;) {
    if (arr[i].img === 3) {
        arr.splice(i, 1);
    }
};
于 2012-08-14T01:35:28.230 回答
1

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

var i = arr.length;
while ( i-- ) {

  if ( arr[i].img == 3 ) {
    arr.splice(i,1);
  }
}
于 2012-08-14T01:36:50.583 回答
0

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

迈克尔·G。

于 2012-08-14T01:33:09.687 回答
0

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

从代码中删除这两个this.,它可以工作。:-)

于 2012-08-14T01:36:01.737 回答
0

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

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));
于 2012-08-14T01:37:13.903 回答