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++) {
  //跳過當前循環(huá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) {
    //跳過當前循環(huá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í)行炬藤,從而達到中止循環(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í)行,從而達到中止循環(huán)效果帝火。
整個循環(huán)的結(jié)果為false溜徙,否則為true。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末犀填,一起剝皮案震驚了整個濱河市蠢壹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌九巡,老刑警劉巖图贸,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冕广,居然都是意外死亡疏日,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門撒汉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沟优,“玉大人,你說我怎么就攤上這事睬辐∧痈螅” “怎么了宾肺?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長侵俗。 經(jīng)常有香客問我锨用,道長,這世上最難降的妖魔是什么隘谣? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任增拥,我火速辦了婚禮,結(jié)果婚禮上洪橘,老公的妹妹穿的比我還像新娘跪者。我一直安慰自己,他們只是感情好熄求,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布渣玲。 她就那樣靜靜地躺著,像睡著了一般弟晚。 火紅的嫁衣襯著肌膚如雪忘衍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天卿城,我揣著相機與錄音枚钓,去河邊找鬼。 笑死瑟押,一個胖子當著我的面吹牛搀捷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播多望,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼嫩舟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了怀偷?” 一聲冷哼從身側(cè)響起家厌,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎椎工,沒想到半個月后饭于,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡维蒙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年掰吕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颅痊。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡畴栖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出八千,到底是詐尸還是另有隱情吗讶,我是刑警寧澤燎猛,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站照皆,受9級特大地震影響重绷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜膜毁,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一昭卓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘟滨,春花似錦候醒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至败玉,卻和暖如春敌土,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背运翼。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工返干, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人血淌。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓矩欠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親悠夯。 傳聞我的和親對象是個殘疾皇子晚顷,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349