最近遇到一個問題,須要在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; } }