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()
。但我想 运行 数组中每个值的循环。
请仔细注意有 rosters
和 roster
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
,但现在您已删除数组中的元素,因此长度已更改。
我有一个数组 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()
。但我想 运行 数组中每个值的循环。
请仔细注意有 rosters
和 roster
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
,但现在您已删除数组中的元素,因此长度已更改。