0

配列がrostersあり、いくつかの条件に従ってこの配列を変更したいと考えています。ここで私がやろうとしていること。

somefunction(callback) {
    for (var i in this.rosters) {
        var roster = this.rosters[i];
        if (roster.age > 7200) {
            this.rosters.splice(i, 1);
        } else {
            this.rosters[i].age = this.EMarshal.tu.getAgeOfTime(
                this.EMarshal.tu.getMyTime(
                    this.EMarshal.tu.getMyDate(roster.date), roster.shifttime
                )
            );
            console.log(this.rosters[i].age);
        }
    }
    callback();
}

if条件が真で呼び出さspliceれると、制御がループから抜け出し、 が呼び出されますcallback()。しかし、配列内の各値に対してループを実行したいと考えています。

rosters2 つのroster異なる変数があることに注意してください。

なぜそれが起こっているのか、そしてその解決策は役に立つでしょう。ありがとう

4

1 に答える 1

1

繰り返している配列を変更しようとしているからです。したがって、試したと言ったように、インデックスを格納するロジックを追加するだけです。ループに入る前に1つの提案がありvar index = []; 、if条件

if (roster.age > 7200) {
  index.push(i);
}

ループの後、それらのインデックスを削除しますrosters

for (var j = index.length - 1; j > -1; j-- ) {
  console.log(j);
  this.rosters.splice(index[j], 1);
}

からインデックスを反復することを忘れないでくださいlast index。そうしないと、 と をから1st index削除しようとしますが、配列から要素を削除したため、長さが変更されました。last indexrosters

于 2015-03-05T06:39:46.160 に答える