最近遇到一个问题,须要在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
或者some
吧date
return false
的时候,循环停止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; } }