Array.forEach的循環裏實現break

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

1. throw 法spa

拋出一個能夠與別的錯誤區別開來的錯誤(這個方法我的以爲有點麻煩)code

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. 空跑循環blog

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

var breakFlag = false;

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

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

3. 使用every 或者 someclass

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

  • 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;
        }
}    
相關文章
相關標籤/搜索