JavaScriptのArray.forEach()を途中で止める方法
結論から言うとforEach()
を使わずに普通のfor文を使えとのことだけれど、例外を投げればいちおう止めることはできる。
try {
[1, 2, 3, 4, 5].forEach((v) => {
if (v === 3) {
throw 'stopped';
}
console.log(v);
});
} catch (err) {
console.error(err);
}
// 1
// 2
// stopped
途中で止まるのは普通のfor文と、every()
, some()
, find()
, findIndex()
とのこと。
[1, 2, 3, 4, 5].every((v) => {
if (v === 3) {
return false;
}
console.log(v);
return true; // ループを続ける場合はtrueを返さないといけない
});
// 1
// 2
うーん。
たしかに普通のfor文を使ったほうがよさそう。本来の使い方とも異なるし。
ちなみにlodashを使っている場合は、false
を返すとそこでループが止まる。
_.forEach([1, 2, 3, 4, 5], (v) => {
if (v === 3) {
return false;
}
console.log(v);
});
// 1
// 2
jQueryなんかもそうだったので、同じ挙動を引き継いでいるのだと思う。