JavaScript跳過/中止循環(huán)的常用方案

如題,日常開發(fā)上會經(jīng)常遇到需要循環(huán)判斷條件,根據(jù)業(yè)務(wù)情況使用跳過/中止循環(huán)。
最簡單的循環(huán)從For循環(huán)開始

var arr = ['ns','ps5','xbox','ps4','will'];
for (var i = 0; i <= arr.length; i++) {
  //跳過當(dāng)前循環(huán)(進(jìn)入下一次循環(huán))
  if ( i == 1) continue;
  console.log(arr[i]);
  //中止循環(huán)(循環(huán)結(jié)束)
  if ( i == 3) break;
}

然而我們在項目中會使用其他循環(huán)的寫法(每次都用上面這種循環(huán)看著也不優(yōu)雅),那他們?nèi)绾螌崿F(xiàn)continue和break呢?

1.jQuery.each()

var arr = ['ns','ps5','xbox','ps4','will'];
$.each(arr, function (i, v) {
  //跳過循環(huán)
  if (i == 1) return true;
  console.log(v);
  //中止循環(huán)
  if (i == 3) return false;
});

可以看出,執(zhí)行結(jié)果與題目開始的For循環(huán)結(jié)果是一樣的,通過return true/false 實現(xiàn) continue/break。

2.Array.forEach(),forEach有幾個要注意的地方,可以自己通過測試驗證。

  • 不支持continue和break的關(guān)鍵字,使用就報錯。
  • return/return false/return true,能實現(xiàn)continue的效果,但不能實現(xiàn)break效果。
  • forEach 本身無法跳出循環(huán),必須遍歷所有的數(shù)據(jù)才能結(jié)束。

解決方案:
2.1 通過 try catch 拋出異常的方式跳出循環(huán)

var arr = ['ns','ps5','xbox','ps4','will'];
try {
  arr.forEach(function (item, index) {
    //跳過當(dāng)前循環(huán)(進(jìn)入下一次循環(huán))
    if ( index == 1) return;
    console.log(item);
    //滿足中止循環(huán)條件,拋出異常
    if (index == 3) {
      throw new Error('中止循環(huán)')
    }
  })
} catch(e) {
  //todo
}

2.2 使用Es5新增 some() 和 every()函數(shù)

  • Array.some()
var arr = ['ns','ps5','xbox','ps4','will'];
var result = arr.some(function (item, index) {
  console.log(item);
  if (index == 3) return true
});
console.log(result) // true

循環(huán)只要其中一個條件return true,后續(xù)的循環(huán)也不會繼續(xù)執(zhí)行,從而達(dá)到中止循環(huán)效果。
整個循環(huán)的結(jié)果為true,否則為false。

  • Array.every()
var arr = ['ns','ps5','xbox','ps4','will'];
var result = arr.every(function (item, index) {
  console.log(item);
  if (index == 1) return false
  return true
});
console.log(result) // false

循環(huán)只有遇到return true,才會執(zhí)行下一次循環(huán);沒有return 或者 return false ,后續(xù)的循環(huán)不會執(zhí)行,從而達(dá)到中止循環(huán)效果。
整個循環(huán)的結(jié)果為false,否則為true。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容