javascript : 调用 splice() 控件后从循环中出来

javascript : after calling the splice() control comes out from the loop

我有一个数组 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()。但我想 运行 数组中每个值的循环。

请仔细注意有 rostersroster 2 个不同的变量。

知道它发生的原因和解决方案会有用。 谢谢

这只是因为您试图更改您正在迭代的数组。 因此,只需按照您所说的那样添加一些逻辑来存储索引。 这是一个建议 在进入循环之前 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 并试图从 rosters 中删除 last index,但现在您已删除数组中的元素,因此长度已更改。