2017-09-29 5 views
-1

注:forEach自体を壊さないように、forEachコールバック関数を使用してwhile()ループを中断したいとします。whileループでarray.forループを中断しますか?

私は現在ループ中のforEachメソッド内でwhileループを中断しようとしていますが、Javascriptでは関数内にbreakステートメントが嫌いです。環境によっては、unsynctatic breakまたはillegal break statementが吐き出されます。

私はこのような何かをしようとしている:

while(true) { 
    example = [false, false, true]; 
    example.forEach(function breakWhile(element) { 
     if(element) {break;} 
    }) 
} 

私はfor...of(プラスwhileループのラベルを使用しては)これを解決するが、それは本当に私の唯一の方法外であることを承知していますか?私はかなりarray.forEachを使用することを好む。さらに悪いことに、私は代わりに関数を使いたいと思うかもしれません。これはJSエンジンでも十分に評価されていません。

+3

の可能性のある重複した[ブレークを呼び出すような方法に短絡Array.forEach?](https://stackoverflow.com/questions/2641347/how-to-short-circuit-array -foreach-like-calling-break) –

+0

@VoidRay実際には、forEachではなくwhile()ループを解除したいと思います。 – Rafael

+0

['every'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every)と[' some'](https:// developerです。いくつかの他の['Array'](https://developer.mozilla.org/en-us/docs/Web/JavaScript/Reference/Global_Objects/Array/some)と一緒に使うべきですUS/docs/Web/JavaScript/Reference/Global_Objects/Array#Methods_2)メソッドを使用します。 – Xufox

答えて

0

あなたの最善の選択肢は、単にフラグを使用することだと思います。

let dobreak = false; 
 
while(!dobreak) { 
 
    example = [false, false, true, false]; 
 
    example.forEach(function breakWhile(element) { 
 
     if(element) {dobreak = true;} 
 
     else if(!dobreak) { 
 
      console.log(element); 
 
     } 
 
    }) 
 
}

もう一つのアイデアは、ここで私はあなたが繰り返しコールバックの内側にtrueを返す場合、それはforEachのを中断しますそれbreakForEach呼ばれてきた、ビルトインのforEachを交換する関数を作成することであり、あなたはしばらく中断することができるように真を返します。

これをデフォルトのArray.prototypeに追加することもできますが、それはお勧めできません。

function breakForEach(arr, iter) { 
 
    for(let l = 0; l < arr.length; l ++) { 
 
    if (iter(arr[l])) return true;  
 
    } 
 
    return false; 
 
} 
 

 
while(true) { 
 
    var example = [false, false, true, false]; 
 
    if (breakForEach(example, function breakWhile(element) { 
 
     if(element) return true; 
 
     console.log(element); 
 
    })) break; 
 
}

+0

Hmmm。それはまさに私が望んでいたものではありません( '休憩 'はより洗練されています)が、それは確かに解決策です。これを受け入れる前に可能なよりよい解決策を少し待つだろうが、少なくとも解決策を考え出すために+1する。 ;) – Rafael

+0

これは定期的に取得するパターンですか?もしそうなら、ヘルパー関数を作成することもできます。おそらく 'whileForEachBreak'と呼ばれるかもしれません。 – Keith

+0

実際これをやらなければならないのは初めてです。 ヘルパー関数は、forEachと単にブレークするよりもクリーンではありませんが、それは可能性はないようです。 – Rafael

関連する問題