2015-12-22 88 views
2

我試圖擺脫使用JavaScript/jQuery的內部foreach循環的。突圍內foreach循環

result.history.forEach(function(item) { 
    loop2: 
    item.forEach(function(innerItem) { 
     console.log(innerItem); 
     break loop2; 
    }); 
}); 

這導致錯誤'Unidentified label loop2'。它似乎恰好在循環之前,而其他問題所說的就是這個問題。

我在做什麼錯,我該如何解決?

編輯:正確,foreach循環不能違背這種方式,但for循環可以有規律的。這是工作:

     result.history.forEach(function(item) { 
          loop2: 
          for (var i = 0; i < item.length; i++) { 
           var innerItem = item[i]; 
           console.log(innerItem); 
           break loop2; 
          } 
         }); 
+2

你不能使用break來做到這一點。 – Pointy

+0

http://stackoverflow.com/a/183197/5442132 – miqdadamirali

+0

@miqdadamirali是的,這就是我所指的鏈接。 –

回答

3

如果您需要能夠打破迭代,使用的.every()代替.forEach()

someArray.every(function(element) { 
    if (timeToStop(element)) // or whatever 
    return false; 
    // do stuff 
    // ... 
    return true; // keep iterating 
}); 

你可以翻轉true/false邏輯和使用.some()代替;相同的基本想法。

+3

正如後人的註釋;這是ECMAScript 5.1起,所以在IE9下面不支持。 – shennan

3

不能這樣做。根據MDN

除了通過拋出異常,無法停止或破壞forEach()循環。如果您需要這樣的行爲,.forEach()方法是錯誤的工具,請使用純循環代替。如果您正在測試謂詞的數組元素並需要布爾返回值,則可以使用every()或some()。

+0

你不能破壞'forEach'循環,但你總是可以使用'.some()'或'.every()'代替。 – Pointy