0

オブジェクトがあり、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}]

この の要素を 1 つだけ削除しますfor loopn問題のインデックスが原因で、このループの条件に一致する要素を削除するにはどうすればよいですか?

どんな助けでも大歓迎です、ありがとう..

4

4 に答える 4

0

これは、 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-13T06:01:37.697 に答える
0

まず、削除する要素のインデックスを見つけます。

var array = [2, 5, 9];
var index = array.indexOf(5);

次に、スプ​​ライスで削除します。

if (index > -1) {
    array.splice(index, 1);
}

splice の 2 番目のパラメーターは、削除する要素の数です。splice は配列をその場で変更し、削除した要素を含む配列を返すことに注意してください

于 2013-09-13T06:01:45.067 に答える