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

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

任何想法为什么会发生以及解决方案将是有用的。谢谢

4

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 index从中删除rosters,但现在您已从数组中删除了元素,因此长度已更改。

于 2015-03-05T06:39:46.160 回答