JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

underscore.jsの_.each関数からループを抜ける方法

_.eachではbreakによる脱出ができない

underscore.jsの_.eachメソッドでは、break文によってループを途中で抜けることができません。これは_.eachがJavaScriptのネイティブメソッドであるArray.prototype.forEachの挙動をそのまま模倣しているためです。forEach自体には、例外を投げるという手段を除いて、ループを強制的に中断する仕組みが用意されていません。

そのため、条件を満たした時点で処理を終了したい場合は、以下のような代替手段を使用する必要があります。

方法1:_.findを使う

_.findは、条件に合致する要素が見つかった時点で自動的にループを終了し、その要素を返り値として返します。早期脱出が必要なケースでは、最もシンプルで推奨される方法です。

const result = _.find([1, 2, 3, 4], (element) => {
    // ここで条件を判定します
    if (element === 2) {
        return true;
    }
    // ここで各要素に対して行いたい処理を記述します
    // ...
});
// result には 2 が格納されます

なお、単に繰り返し処理を行いたいだけで戻り値が不要な場合でも、_.findのコールバック内で処理を実行すれば、目的を達成できます。

方法2:例外を投げて抜ける

どうしても_.eachを使いたい場合は、コールバックの中から意図的に例外をスローし、それをtry...catchで受け止めることでループを脱出できます。

try {
    _([1, 2, 3, 4]).each((element) => {
        // ここで条件を判定します
        if (element === 2) {
            throw new Error();
        }
        // ここで各要素に対して行いたい処理を記述します
        // ...
    });
}
catch (e) {
    // 脱出用の例外なので何も処理しません
}

ただし、この手法は制御フローのために例外を利用するものであり、可読性やパフォーマンスの面で好ましくないとされています。あくまで最後の手段として考え、可能であれば_.findや、ES2015以降であればfor...of文とbreakの組み合わせ、あるいはArray.prototype.someeveryの活用を検討するとよいでしょう。

  1. ExcelのFIXED関数の使い方を徹底解説!数値を指定桁数のテキストに変換する方法

    ExcelのFIXED関数とは? FIXED関数は、Microsoft Excelに標準搭載されている文字列(テキスト)関数の一つです。数値を指定した小数点以下の桁数で四捨五入し、テキスト形式に変換して返します。レポートや帳票など、表示形式を整えた数値を文字列として扱いたい場合に便利な関数です。 FIXED関数の書式と引数 FIXED関数の書式は =FIXED(数値, [小数点以下の桁数], [桁区切り]) です。各引数の意味は以下のとおりです。 数値(Number):四捨五入してテキストに変換したい数値を指定します。この引数は必須です。 小数点以下の桁数(Decimals):小数点の右側に

  2. ExcelのRANDBETWEEN関数の使い方|指定した範囲内の乱数を簡単に生成する3つの方法

    Microsoft ExcelのRANDBETWEEN(ランドビトウィーン)関数は、数学/三角関数に分類される関数の一つで、指定した2つの数値の間からランダムな整数を返します。サイコロの目のような1〜6の乱数を作りたいときや、くじ引きの番号、テストデータなどを自動生成したい場合にとても便利です。 この記事では、RANDBETWEEN関数の書式と、セルへの直接入力、「関数の挿入」ダイアログボックス、「数式」タブを使った3つの方法を、初心者の方にもわかりやすく解説します。 RANDBETWEEN関数の書式 RANDBETWEEN関数の書式は以下の通りです。 =RANDBETWEEN(最小値, 最大