• 當前位置:首頁 > IT技術 > 其他 > 正文

    (面試題) 面試官:如何在forEach的循環里使用break
    2022-08-29 23:55:46


    (面試題) 面試官:如何在forEach的循環里使用break_javascript

    大家都知道 js 的 forEach里是不能使用break。但是為什么不能在forEach里使用呢?在forEach里使用break 會發生什么呢?

    一. 在forEach里使用break 會發生什么

    紙上得來終覺淺,絕知此事要躬行。要想知道發生什么,不妨在代碼里驗證一下。

    let arr = [1, 2, 3, 4, 5];

    arr.forEach((item, index) => {
    if (item > 2) {
    break
    }
    console.log(item)
    })

    // SyntaxError: Illegal break statement (非法中斷語句)

    在控制臺可以看到輸出:語法錯誤。

    二. 為什么不能在forEach里使用break

    要想知道forEach里為什么不能使用break,必須先要搞清楚break的語法。

    你真的了解break嗎

    break 表示中止當前循環。

    語法:break [label];

    label:與語句標簽相關聯的標識符。如果 break 語句不在一個循環或者Switch語句中,則該項是必須的。

    我們看一個例子:

    我們平時正常使用時

    let arr = [1, 2, 3, 4, 5]

    for (let i = 0; i < arr.length; i++) {
    if (arr[i] > 2) {
    break // 大于2 跳出整個循環
    }
    console.log(arr[i]) // 1, 2
    }

    break 與語句標簽一起使用時

    let arr = [1, 2, 3, 4, 5]

    outer_block: // 標識最外層循環
    for (let i = 0; i < arr.length; i++) {
    console.log('i', arr[i]) // 1
    inner_block: // 標識里面的for循環
    for (let j = 0; j < arr.length; j++) {
    if (j > 3) {
    break outer_block // 跳出最外層循環
    }
    console.log('j', arr[j]) // 1, 2, 3, 4
    }
    }

    輸出結果:最外層輸出:1,最次層輸出:1,2,3,4??梢钥闯鯾rake終止循環是有條件的。我們在回來看forEach這個問題。

    先看下forEach語法:

    forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;

    是上面的定義相當于:

    Array.prototype.forEach = function(callback) {
    for (let i = 0; i < this.length; i++) {
    callback(this[i], i, this);
    }
    };

    可以看出:我們在forEach里使用break,其實是在callback里使用break。再明白一點,其實就是相當于你在for循環里這樣寫:

    let arr = [1, 2, 3, 4, 5]

    outer_block:
    for (let i = 0; i < arr.length; i++) {
    console.log('i', arr[i])
    inner_block1:
    (function() {
    inner_block2:
    break // 報錯,不能直接使用break
    })()
    }

    到這里我想你已經明白了為什么不能在forEach里使用break了?;氐奖疚牡念}目上來。

    如何在forEach的循環里break?

    查閱MDN,上面有一個備注:

    (面試題) 面試官:如何在forEach的循環里使用break_開發語言_02


    編輯切換為居中

    MDN

    在forEach里合法的使用break

    function breakInForEach(arr) {
    let BreakException = {};
    let res = false;
    try {
    arr.forEach(item => {
    if (item === 2) {
    res = true;
    throw BreakException;
    }
    })
    }
    catch(e) {
    if (e !== BreakException) throw e
    }
    return res;
    }

    console.log(foreachBreak([1, 2, 3, 4, 5, 6])); // true

    也可以使用every 或者 some等

    最推薦的方式呢,就是這種需要break的場景下,直接使用every或者some。

    • every: 碰到return false的時候,循環中止,return true 循環繼續;
    • some: 碰到return ture的時候,循環中止,return false 循環繼續;

    總結

    本文介紹了為什么不能在forEach里使用break;在forEach里使用break 會發生什么以及怎樣在forEach里使用break。

    ?

    本文摘自 :https://blog.51cto.com/u

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码