2

オブジェクトの配列を反復処理し、いくつかの条件に基づいてそれらの一部を削除したいと考えています。

スプライスを使用してアイテムを削除し、アイテムの整然とした数を維持しました。

次に、アイテムが削除されるたびに、カウントを減らします。

しかし、何らかの理由で機能しません:

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

あなたはthis.arrただの代わりに言及していますarr

this.コードから2つを削除すると、機能します。:-)

于 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 に答える
0

私は以前にこの同じ困難に対処したことがあります。私の解決策は、配列をループして、削除する要素の別の配列を作成することでした。削除する要素のリストを逆にループして削除します。これは私にとってはうまくいきました。

マイケル G.

于 2012-08-14T01:33:09.687 に答える