JSのforEachループについて知らなかった3つのこと
JSでforEach
ループがどのように機能するかを正確に知っていると思いますか?まあ、これらは最近まで私の考えでした:”あなたが簡単にbreak
またはreturn
またはcontinue
を使用できる通常のfor
ループ”。
今日は、forEach
ループについて知らなかったかもしれない3つのことをお見せします。
以下のコードが1 2
を印刷してから停止すると思いますか?
array = ;array.forEach(function (element) {
console.log(element);
if (element === 2)
return;
});// Output: 1 2 3 4
いいえ、そうではありません。Javaの背景から来た場合、あなたはおそらくそれがどのように可能であるか自問するでしょうか?
その理由は、forEach
関数でコールバック関数を渡しているためです。return
が1つの場合、つまり要素が2の場合に関係なく、通常の関数と同じように動作し、各要素に適用されます。
公式のMDNドキュメントから:
例外をスローする以外に
forEach()
ループを停止または中断する方法はありません。 このような動作が必要な場合は、forEach()
メソッドが間違ったツールです。
上からコードを書き直してみましょう:
const array = ;const callback = function(element) {
console.log(element);
if (element === 2)
return; // would this make a difference? no.
}for (let i = 0; i < array.length; i++) {
callback(array);
}// Output: 1 2 3 4
各反復で各要素に関数を適用するため、return
ステートメントは違いを生じません。
あなたは
を’破る’ことはできませんあなたはforEach
ループは、以下の例ではbreak
だろうと思いますか?いいえ、break
命令は技術的にはループ内にないため、実行されません。
通常のfor
ループを使用するだけです。 誰もあなたを笑わないだろう。
const array = ;for (let i = 0; i < array.length; i++) {
console.log(array);
if (array === 2)
break;
}// Output: 1 2
あなたは’続行’することはできません
以下のコードがコンソールに2
を印刷するのをスキップし、1 3 4
のみを表示することを期待していますか?いいえ、continue
命令はbreak
命令と同様にループ内にないため、実行されません。
通常のfor
ループをもう一度使用してください。
for (let i = 0; i < array.length; i++) {
if (array === 2)
continue;
console.log(array);
}// Output: 1 3 4
そうだった! 今日は何か新しいことを学んだことを願っています。