多階層for-inループ文にて、breakでループを終了させる

入れ子(ネスト)で多階層にしたfor-inループ文にて、複数の階層のループ(繰り返し)を終了させたいときは、breakの引数に、ラベルを指定する。

ラベルを指定しない場合、break文がある階層のループ(繰り返し)だけを終了させる。

構文

ラベル指定あり

break ラベル;

指定したラベルがある階層のひとつ下の階層のループ(繰り返し)を終了させる。指定したラベルがある階層のループ(繰り返し)の次の処理へ移る。ラベルがループ外にある場合は、全階層のループを抜ける。

2階層

2次元の配列(配列型オブジェクト)や連想配列(単純なオブジェクト)の各要素に、何らかの処理を実行したいときなど。

loop1: // ラベル
for ( 変数A in オブジェクト ) {
    繰り返し行う処理文
    loop2: // ラベル
    for ( 変数B in オブジェクト[変数A] ) {
        繰り返し行う処理文
        if ( 終了条件式 ) {
            break loop1; // 全階層のループを終了させる
        }
    }
}

3階層

3次元の配列(配列型オブジェクト)や連想配列(単純なオブジェクト)の各要素に、何らかの処理を実行したいときなど。

loop1: // ラベル
for ( 変数A in オブジェクト ) {
    繰り返し行う処理文
    loop2: // ラベル
    for ( 変数B in オブジェクト[変数A] ) {
        繰り返し行う処理文
        loop3: // ラベル
        for ( 変数C in オブジェクト[変数A][変数B] ) {
            繰り返し行う処理文
            if ( 終了条件式 ) {
                break loop2; // 3次元目と2次元目のループを終了し、1次元目のループの次の処理へ移る
            }
        }
    }
}

ラベル指定なし

break;

break文がある階層のループ(繰り返し)だけを終了させる。

2階層

for ( 変数A in オブジェクト ) {
    繰り返し行う処理文
    for ( 変数B in オブジェクト[変数A] ) {
        繰り返し行う処理文
        if ( 終了条件式 ) {
            break; // 2次元目のループを終了させる
        }
    }
}

3階層

for ( 変数A in オブジェクト ) {
    繰り返し行う処理文
    for ( 変数B in オブジェクト[変数A] ) {
        繰り返し行う処理文
        for ( 変数C in オブジェクト[変数A][変数B] ) {
            繰り返し行う処理文
            if ( 終了条件式 ) {
                break; // 3次元目のループを終了させる
            }
        }
    }
}

サンプル

2次元の連想配列(単純なオブジェクト)

ラベル指定あり

<script type="text/javascript">
var $obj = {
    propA: {
        propA: "値1-1",
        propB: "値1-2",
        propC: "値1-3"
    },
    propB: {
        propA: "値2-1",
        propB: "値2-2",
        propC: "値2-3"
    },
    propC: {
        propA: "値3-1",
        propB: "値3-2",
        propC: "値3-3"
    }
};
loop1: // ラベル
for ( var $keyA in $obj ) {
    loop2: // ラベル
    for ( var $keyB in $obj[$keyA] ) {
        if ( $obj[$keyA][$keyB] == "値2-2" ) {
            break loop1; // ループを終了させる
        }
        document . write( $obj[$keyA][$keyB] );
        document . write( ', ' );
    }
    document . write( '<br />' );
}
</script>

↓↓↓出力結果↓↓↓

ラベル指定なし

<script type="text/javascript">
var $obj = {
    propA: {
        propA: "値1-1",
        propB: "値1-2",
        propC: "値1-3"
    },
    propB: {
        propA: "値2-1",
        propB: "値2-2",
        propC: "値2-3"
    },
    propC: {
        propA: "値3-1",
        propB: "値3-2",
        propC: "値3-3"
    }
};
for ( var $keyA in $obj ) {
    for ( var $keyB in $obj[$keyA] ) {
        if ( $obj[$keyA][$keyB] == "値2-2" ) {
            break; // ループを終了させる
        }
        document . write( $obj[$keyA][$keyB] );
        document . write( ', ' );
    }
    document . write( '<br />' );
}
</script>

↓↓↓出力結果↓↓↓

2次元の配列オブジェクト

ラベル指定あり

<script type="text/javascript">
var $arr = new Array(
    [ "要素1-1", "要素1-2", "要素1-3" ],
    [ "要素2-1", "要素2-2", "要素2-3" ],
    [ "要素3-1", "要素3-2", "要素3-3" ]
);
loop1: // ラベル
for ( var $keyA in $arr ) {
    loop2: // ラベル
    for ( var $keyB in $arr[$keyA] ) {
        document . write( $arr[$keyA][$keyB] + ', ' );
        if ( $arr[$keyA][$keyB] == "要素2-2" ) {
            break loop1; // ループを終了させる
        }
    }
    document . write( '<br />' );
}
</script>

↓↓↓出力結果↓↓↓

ラベル指定なし

<script type="text/javascript">
var $arr = new Array(
    [ "要素1-1", "要素1-2", "要素1-3" ],
    [ "要素2-1", "要素2-2", "要素2-3" ],
    [ "要素3-1", "要素3-2", "要素3-3" ]
);
for ( var $keyA in $arr ) {
    for ( var $keyB in $arr[$keyA] ) {
        document . write( $arr[$keyA][$keyB] + ', ' );
        if ( $arr[$keyA][$keyB] == "要素2-2" ) {
            break; // ループを終了させる
        }
    }
    document . write( '<br />' );
}
</script>

↓↓↓出力結果↓↓↓

3次元の配列オブジェクト

ラベル指定あり

<script type="text/javascript">
var $arr = new Array(
    [
        [ "要素1-1-1", "要素1-1-2", "要素1-1-3" ],
        [ "要素1-2-1", "要素1-2-2", "要素1-2-3" ],
        [ "要素1-3-1", "要素1-3-2", "要素1-3-3" ]
    ],
    [
        [ "要素2-1-1", "要素2-1-2", "要素2-1-3" ],
        [ "要素2-2-1", "要素2-2-2", "要素2-2-3" ],
        [ "要素2-3-1", "要素2-3-2", "要素2-3-3" ]
    ],
    [
        [ "要素3-1-1", "要素3-1-2", "要素3-1-3" ],
        [ "要素3-2-1", "要素3-2-2", "要素3-2-3" ],
        [ "要素3-3-1", "要素3-3-2", "要素3-3-3" ]
    ]
);
lableLoop1: // ラベル
for ( var $keyA in $arr ) {
    lableLoop2: // ラベル
    for ( var $keyB in $arr[$keyA] ) {
        lableLoop3: // ラベル
        for ( var $keyC in $arr[$keyA][$keyB] ) {
            document . write( $arr[$keyA][$keyB][$keyC] + ', ' );
            if ( $arr[$keyA][$keyB][$keyC] == "要素2-2-2" ) {
                document . write( '<br />' );
                break lableLoop2; // ループを終了させる
            }
        }
        document . write( '<br />' );
    }
}
</script>

↓↓↓出力結果↓↓↓

ラベル指定なし

<script type="text/javascript">
var $arr = new Array(
    [
        [ "要素1-1-1", "要素1-1-2", "要素1-1-3" ],
        [ "要素1-2-1", "要素1-2-2", "要素1-2-3" ],
        [ "要素1-3-1", "要素1-3-2", "要素1-3-3" ]
    ],
    [
        [ "要素2-1-1", "要素2-1-2", "要素2-1-3" ],
        [ "要素2-2-1", "要素2-2-2", "要素2-2-3" ],
        [ "要素2-3-1", "要素2-3-2", "要素2-3-3" ]
    ],
    [
        [ "要素3-1-1", "要素3-1-2", "要素3-1-3" ],
        [ "要素3-2-1", "要素3-2-2", "要素3-2-3" ],
        [ "要素3-3-1", "要素3-3-2", "要素3-3-3" ]
    ]
);
for ( var $keyA in $arr ) {
    for ( var $keyB in $arr[$keyA] ) {
        for ( var $keyC in $arr[$keyA][$keyB] ) {
            document . write( $arr[$keyA][$keyB][$keyC] + ', ' );
            if ( $arr[$keyA][$keyB][$keyC] == "要素2-2-2" ) {
                break; // ループを終了させる
            }
        }
        document . write( '<br />' );
    }
}
</script>

↓↓↓出力結果↓↓↓

スポンサード リンク

カテゴリー: for-in, JavaScript, リファレンス, 制御構造 タグ: パーマリンク