私はこれを試しました:
for(i = 0; i < 5; i++){
for(j = i + 1; j < 5; j++){
break(2);
}
alert(1);
}
取得するためだけに:
SyntaxError
:;
ステートメントの前にありません
では、JavaScriptでネストされたループをどのように壊すのでしょうか?
私はこれを試しました:
for(i = 0; i < 5; i++){
for(j = i + 1; j < 5; j++){
break(2);
}
alert(1);
}
取得するためだけに:
SyntaxError
:;
ステートメントの前にありません
では、JavaScriptでネストされたループをどのように壊すのでしょうか?
次のように、ラベルに割り込むことができるはずです。
function foo () {
dance:
for (var k = 0; k < 4; k++) {
for (var m = 0; m < 4; m++) {
if (m == 2) {
break dance;
}
}
}
}
このように、内側のループではなく、外側のループに名前を付けて、そのループを解除する必要があります。
outer_loop:
for(i=0;i<5;i++) {
for(j=i+1;j<5;j++) {
break outer_loop;
}
alert(1);
}
アーロンズを参照してください。それ以外の場合:
j=5;i=5
の代わりにbreak
。
2つ以上のループから抜け出すには、少なくとも5つの異なる方法があります。
1)親ループを最後に設定します
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
{
i = 5;
break;
}
}
}
2)ラベルを使用する
fast:
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
break fast;
}
}
3)変数を使用する
var exit_loops = false;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
{
exit_loops = true;
break;
}
}
if (exit_loops)
break;
}
4)自己実行機能を使用する
(function()
{
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
return;
}
}
})();
5)通常の機能を使用する
function nested_loops()
{
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
return;
}
}
}
nested_loops();
loop1:
for (var i in set1) {
loop2:
for (var j in set2) {
loop3:
for (var k in set3) {
break loop2; // breaks out of loop3 and loop2
}
}
}
Javascriptのネストされたループから抜け出すための最良の方法からコピーされたコード?
質問を投稿する前に検索してください。リンクは、このページの左側にある最初の関連質問でした。
残念ながら、フラグを設定するか、ラベルを使用する必要があります(古い学校のgotoステートメントを考えてください)
var breakout = false;
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
breakout = true;
break;
}
if (breakout) break;
alert(1)
};
ラベルアプローチは次のようになります。
end_loops:
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
break end_loops;
}
alert(1)
};
編集:ラベルが正しく配置されていません。
も参照してください:
私の意見では、構成語彙を最小限に抑えることが重要です。休憩をなくして簡単に続けられるなら、そうします。
function foo ()
{
var found = false;
for(var k = 0; (k < 4 && !found); k++){
for(var m = 0; (m < 4 && !found); m++){
if( m === 2){
found = true;
}
}
}
return found;
}
ループの後、mとkはあなたが思うかもしれない1つ大きいことに注意してください。これは、m++とk++がループ条件の前に実行されるためです。ただし、それでも「ダーティ」ブレイクよりはましです。
編集:長いコメント@Dennis .. ..
私は「ダーティ」であることを100%真剣に考えていたわけではありませんが、それでも「ブレーク」は私自身のクリーンなコードの概念に反していると思います。マルチレベルの休憩をとることを考えると、実際にシャワーを浴びているような気分になります。
私はすべての人生をコーディングしてきたので、コードについての感覚について私が意味することを正当化することがわかります。私がそれを考えることができる最も良い理由は、マナーと文法の組み合わせです。休憩は丁寧ではありません。マルチレベルの休憩は単なる失礼です。
forステートメントを見るとき、読者はどこを見ればよいかを正確に知っています。エンゲージメントのルールについて知る必要があるすべては、括弧の間にある契約にあります。読者として、私を侮辱し、だまされたような気がします。
明晰さは不正行為よりもはるかに尊重されます。
マルチレベルループに関数を使用する-これは良い方法です:
function find_dup () {
for (;;) {
for(;;) {
if (done) return;
}
}
}
自己実行関数でラップして戻ります
(function(){
for(i=0;i<5;i++){
for (j=0;j<3;j++){
//console.log(i+' '+j);
if (j == 2) return;
}
}
})()
ネストされたループをreturn
「壊す」 。for
function foo ()
{
//dance:
for(var k = 0; k < 4; k++){
for(var m = 0; m < 4; m++){
if(m == 2){
//break dance;
return;
}
}
}
}
foo();
ネストされたforループは、「break」という単語で分割できます。ラベルなしで機能します。
あなたの場合、あなたはループを壊すのに十分な条件を持っている必要があります。
次に例を示します。
var arr = [[1,3], [5,6], [9,10]];
for (var a = 0; a<arr.length; a++ ){
for (var i=0; i<arr[a].length; i++) {
console.log('I am a nested loop and i = ' + i);
if (i==0) { break; }
}
console.log('first loop continues');
}
以下をログに記録します。
> I am a nested loop and i = 0
> first loop continues
> I am a nested loop and i = 0
> first loop continues
> I am a nested loop and i = 0
> first loop continues
リターン; この場合、ステートメントは機能しません。 作業ペン
もう1つのトリックは、親ループを最後に到達するように設定してから、現在のループを中断することです。
function foo()
{
for(var k = 0; k < 4; k++){
for(var m = 0; m < 4; m++){
if(m == 2){
k = 5; // Set this then break
break;
}
console.log(m);
}
}
}
break
パラメータを取りません。2つの回避策があります。
それらを関数でラップして呼び出しますreturn
内側のループにフラグを設定し、フラグが設定されている場合はループの直後に再度ブレークします。
最初のループを解除します。
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
//do something
break;
}
alert(1);
};
両方のループを解除します。
for(i=0;i<5;i++)
{
var breakagain = false;
for(j=i+1;j<5;j++)
{
//do something
breakagain = true;
break;
}
alert(1);
if(breakagain)
break;
};
function myFunction(){
for(var i = 0;i < n;i++){
for(var m = 0;m < n;m++){
if(/*break condition*/){
goto out;
}
}
}
out:
//your out of the loop;
}