跳出forEach迴圈
阿新 • • 發佈:2019-01-07
我們平時用到的迴圈有很多種。for, map, while, forEach, for...of, for...in等等,每種迴圈都有在某一次迴圈語句中跳出本次迴圈的方法,但是除了forEach。
有小夥伴說不用不就好了。其實這些迴圈裡邊,當屬for的效率最高,for...in最低。但是for的寫法比較繁瑣而且“看起來”不是那麼高階僅僅是看起來,因為它的效能確實是最好的。但是定義迴圈變數不當有可能進入非同步的坑。所以我們在寫業務時很多都會用forEach去代替for,因為它每次迴圈自帶當次值和下標,確實方便很多。
但是有時候,長度一百的陣列,我們可能在第十次迴圈就取到了想要的值,如果用for,我們可能會用break直接跳出。但是forEach,這個傢伙不識別break。那怎麼跳出呢?用return?它只會中斷當此迴圈。
用try{}catch(){}。你沒看錯。捕獲異常機制本身的功能就是在出現異常的時候跳出try的程式碼塊到catch裡處理異常。我們可以用throw方法手動丟擲一個異常,這樣就跳出了forEach迴圈。
寫break直接就報錯了。
正確寫法:
let arr = [0, 1, 2, 3, 4, 5, 6] try{ arr.forEach((item) => { if (item === 3) { throw 'Jump out now!'//在這裡丟擲異常 } console.log(item) }) } catch (e) { console.log(e) }
執行結果:
0
1
2
Jump out now!
果然知識限制了我們的想象力。