forEach方法跳出循環

前文

沒怎麼理解JavaScript的forEach方法的童鞋使用forEach時很容易遇到一個問題就是,當你想要跳出這個循環時,發現returnbreak是不起做用的。下面咱們來分析一下緣由以及解決方法。javascript

正文

首先咱們要知道的是forEach方法的機制是對數組的每一個有效元素執行一次callback函數,而後returnbreak等只做用於一個函數,也就形成了沒法跳出forEach循環的問題,而是隻能跳過當前函數的執行。java

解決方案

曲線救國(SegmentFault

經過使用拋出異常的方式能夠停止。segmentfault

function foo(arr ,item){
    var BreakException= {};

    try {
        arr.forEach(function(i) {
            if(i === item) throw BreakException;
            console.log(i);
        });
    } catch(e) {
        if (e!==BreakException) throw e;
    }
}

Array.some&Array.every

正常的使用環境:若是是測試一個數組裏的元素是否符合某條件,且須要返回一個布爾值則應該使用這兩個方法。這裏可用於跳出循環。數組

function foo(arr ,item){
        arr.some(function(i) {
            if(i === item) return true;
            console.log(i);
        });
}
function foo(arr ,item){
        arr.every(function(i) {
            if(i === item) return false;
            console.log(i);
        });
}

循規蹈矩

若是你須要這樣,使用forEach()方法是錯誤的,你能夠用一個簡單的循環做爲替代。—— MDN
對於多重for循環,咱們跳出循環須要特殊處理一下:函數

xh:    //首先將循環命名
 for(var i=0;i<10;i++){
    for(var j=0;j<5;j++){
        if(i==3 && j==4){
            break xh;    //跳出循環xh
        }
    }
 }

參考

  1. https://segmentfault.com/q/10...
  2. https://developer.mozilla.org...
相關文章
相關標籤/搜索