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