最近遇到一个问题,需要在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; } }