做專案時,習慣使用foreach來代替for迴圈,我們都知道for迴圈裡要跳出整個迴圈是使用break,但在陣列中用foreach迴圈如果要退出整個迴圈使用break會報錯,return也無法跳出迴圈。也就是說foreach遍歷並不能被終止
在fromeach中使用break
在fromeach中使用returnlet arr = ['1', '2', '3', '4', '5'];
arr.foreach(item=>
console.log(item) // 結果:報錯 uncaught syntaxerror: illegal break statement at array.foreach ()
})
通過for來遍歷實現let arr = ['1', '2', '3', '4', '5'];
arr.foreach(item=>
})
通過reduce迭代實現,需設定乙個中斷flaglet arr = ['1', '2', '3', '4', '5'];
for(let i=0; i通過try···catch丟擲異常的方式實現
通過丟擲異常的方式實現終止迴圈(foreach無法通過正常流程結束迴圈)
let arr = ['1', '2', '3', '4', '5'];
try
console.log(item) // 1 2
})} catch (e)
陣列的另外兩個方法some與every(不建議使用)let arr = ['1', '2', '3', '4', '5'];
arr.reduce(function (p, c)
if (this.break)
console.log(c) // 1 2
}, '')
some()當內部return true時跳出整個迴圈
every()當內部return false時跳出整個迴圈let arr = ['1', '2', '3', '4', '5'];
arr.some(item=>
console.log(item);
});
從實現上表達出的語義來講,some像是在說:有乙個成功,我就成功,而every像是在說:有乙個失敗,我就失敗。let arr = ['1', '2', '3', '4', '5'];
arr.every(item=> else
});
一般情況下,我們用some和every是要用它返回的結果。這裡只是簡簡單單利用了其迴圈罷了。這麼寫**可讀性不是很高,但確實是替換掉for的一種方式,不過every要保證在退出迴圈之前的迭代都返回true
JSTL標籤 foreach 退出迴圈
今天用到了 jstl 的 foreach 標籤迴圈遍歷乙個集合,在這個迴圈內寫了乙個 標籤,當滿足某個條件的時候要終止迴圈,但是標籤裡不能使用 break,那怎麼樣終止迴圈呢?且看下面的 list l new arraylist l.add new long 1 l.add new long 4 l...
forEach無法跳出迴圈的解決思路
如果使用過foreach方法來遍歷集合,會發現在lambda表示式中的return並不會終止迴圈,這是由於lambda的底層實現導致的,看下面的例子 public static void main string args 返回結果 s a s b s c可以看到在foreach方法中即是採用了ret...
增強for迴圈 foreach迴圈
1 作用 簡化迭代器的書寫格式。注意 foreach迴圈的底層還是使用了迭代器遍歷。2 適用範圍 如果是實現了iterable介面的物件或者是陣列物件都可以使用foreach迴圈。3 格式 for 資料型別 變數名 遍歷的目標 示例 1 public static void main string ...