Array.forEach的循環里實現break


最近遇到一個問題,需要在forEach 里實現 break。 在網上找了一下,看到幾種方案:

1. throw 法

拋出一個可以與別的錯誤區別開來的錯誤(這個方法個人覺得有點麻煩)

var BreakException = {};

try{
    drUOMs.forEach(drUOM => {
       if (drUOM.UOM == strToUOM)
          strFromBaseUOM = drUOM.BaseUOM;
       if (drUOM.UOM == strFromUOM)
           throw BreakException;
    });
} catch(e){
    if (e !== BreakException) throw e;
}

2. 空跑循環

在外層加一個標識,這種會影響性能。

var breakFlag = false;

drUOMs.forEach(drUOM=> {
    if (breakFlag === true) {
        return false;
    }

    if (drUOM.UOM==strToUOM) {
        breakFlag = true
    }
    
})

3. 使用every 或者 some

這種需要break的場景下,直接使用every或者some

  • every: 碰到return false的時候,循環中止
  • some: 碰到return ture的時候,循環中止

兩者的代碼分別如下

drUOMs.every(drUOM => {
            if (validateUOM) {
                  defaultUOM = drUOM;
                  return false;
            } else {
                  return true;
            }
});
drUOMs.some(drUOM => {
            if (validateUOM) {
                  defaultUOM = drUOM;
                  return true;
            } else {
                  return false;
            }
});

4.用for

for (var i = 0; i < drUOMs.length; i++) {
       var drUOM = drUOMs[i];
       if (drUOM.UOM == undefined) {
            continue;
        } else if(drUOM.BaseUOM == undefined){
            break;
        }
}    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM