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;
        }
}    

 

posted @ 2018-04-17 18:24  小懒虫fei  阅读(1792)  评论(0编辑  收藏  举报