2016-01-03 32 views
-2

請幫忙解決問題。如何檢查數組中元素的存在?

活生生的例子是在這裏: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: Illegal break statement

回答

0

突破是打破了像一個循環,同時,開關等你不必在這裏,你需要使用恢復到其打破當前函數的執行流程並返回給調用者。看到類似的帖子在這裏: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/

0

您不能從使用的forEach斷退出。只要刪除休息,它會起作用。

PS:說實話,這是更好地重構代碼:)

0

你唯一的問題是,你不能用break;語句在forEach函數中。

但是你可以在一個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同意關於重構代碼

的想法
0

你不能破壞forEach回調,只是因爲它是一個函數。

這裏的更新working jSfiddle

如果你真的想打破它,你可以使用異常如下面的代碼。

try { 
    [1,2,3].forEach(function() { 
     if(conditionMet) { 
      throw Error("breaking forEach"); 
     } 
    }); 
} catch(e) { 
} 

否則,您可以使用jQuery's each()方法。當它是回調返回false它停止。

jQuery.each([1,2,3], function() { 
    if(conditionMet) { 
     return false; 
    } 
});