请帮助解决问题。
现场示例在这里:https://jsfiddle.net/oqc5Lw73/
我生成了几个坦克对象:
var Tank = function(id) {
this.id = id;
Tank.tanks.push(this);
}
Tank.tanks = [];
for (var i = 0; i < 3; i++) {
new Tank(i);
}
Tank.tanks.forEach(function(tank, i, arr) {
console.log(tank);
});
console.log('summary tanks: ' + Tank.tanks.length);
我用随机索引删除坦克后:
var tankDel = Math.floor(Math.random() * (3));
Tank.tanks.splice(tankDel, 1);
Tank.count -= 1;
Tank.tanks.forEach(function(tank, i, arr) {
console.log(tank);
});
console.log('summary tanks: ' + Tank.tanks.length);
我尝试检查坦克大量。如果坦克大量包含属性'id'= 0的坦克,那么我需要显示警报('id为0的坦克已死)。
但控制台输出会显示错误消息:
Uncaught SyntaxError:非法中断语句
答案 0 :(得分:0)
你不能使用break退出forEach。只需删除休息,就可以了。
P.S:老实说,最好重构那段代码:)答案 1 :(得分:0)
break就是为了摆脱一个循环,而你在这里没有切换等,你需要使用return来打破当前函数的执行流程并返回给调用者。在此处查看类似帖子:illegal use of break statement; javascript
Tank.tanks.forEach(function(tank, i, arr) {
if(tank.id == 0) {
tank0Dead = false;
return;
};
});
if(tank0Dead == true) {
alert('tank with id 0 is dead');
};
jsfiddle:https://jsfiddle.net/oqc5Lw73/6/
答案 2 :(得分:0)
你唯一的问题是你不能使用休息时间; forEach函数中的语句。
但是你可以在for()循环中,所以这里是带有for:
的等效代码for (var i = 0; i < Tank.tanks.length; i++){
if (Tank.tanks[i].id == 0){
tank0Dead = false;
break;
}
}
https://jsfiddle.net/oqc5Lw73/5/
但我同意@ dimko1关于重构代码的想法
答案 3 :(得分:0)
你不能打破forEach回调,只因为它是一个功能。
此处已更新working jSfiddle
如果你真的想打破它,可以使用下面的代码之类的异常。
<=
否则您可以使用try {
[1,2,3].forEach(function () {
if(conditionMet) {
throw Error("breaking forEach");
}
});
} catch(e) {
}
方法。当它的回调返回false时它会停止。
jQuery's each()