如何检查数组中元素的存在?

时间:2016-01-03 11:03:21

标签: javascript

请帮助解决问题。

现场示例在这里: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:非法中断语句

4 个答案:

答案 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()