comilablog

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なんかもそうだったので、同じ挙動を引き継いでいるのだと思う。

参考ページ