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

JavaScriptで複数の配列の論理積(AND)を求める方法

はじめに

JavaScriptでは、真偽値を要素とする配列がネストした2次元配列を扱う場面があります。例えば、次のようなデータ構造です。

const arr = [[true, false, false], [false, false, false], [false, false, true]];

このような配列に対して、各サブ配列の同じ位置にある要素同士を論理積(&& 演算子)で結合し、結果を1つの1次元配列として返す関数を作成してみましょう。

つまり、すべてのサブ配列の1番目の要素同士、2番目の要素同士…というように対応する位置ごとに true かどうかを判定し、その結果をまとめた新しい配列を生成します。

実装方法:Array.prototype.reduce() を活用

この処理には、配列の集約処理に便利な Array.prototype.reduce() メソッドを使用します。初期値として空の配列を用意し、各サブ配列を順番に走査しながら、対応するインデックスの要素に対して論理積を適用していきます。

サンプルコード

const arr = [[true, false, false], [false, false, false], [false, false, true]];

const andMerge = (arr = []) => {
  return arr.reduce((acc, val) => {
    val.forEach((bool, ind) => {
      acc[ind] = acc[ind] && bool || false;
    });
    return acc;
  }, []);
};

console.log(andMerge(arr));

コードの解説

reduce() のコールバック関数内では、アキュムレータ(acc)にこれまでの計算結果が保持されます。各サブ配列(val)を forEach() でループし、インデックス(ind) を使って対応する位置の要素と論理積を取ります。

なお、acc[ind] && bool || false という式は、最初の要素と比較する際に acc[ind]undefined になるため、それを false として扱うための工夫です。これにより、未定義値による予期しない動作を防いでいます。

実行結果

このコードを実行すると、コンソールには次のように出力されます。

[ false, false, false ]

各位置の要素を見てみると、1番目は true && false && false、2番目は false && false && false、3番目は false && false && true となるため、すべて false になります。これは正しい結果です。

まとめ

このように reduce()forEach() を組み合わせることで、ネストされた配列の対応する要素同士を簡単に結合できます。OR演算(||)で同様の処理を行いたい場合も、論理演算子を置き換えるだけで応用可能です。データのフィルタリングや条件判定など、さまざまな場面で活用できるテクニックなので、ぜひ覚えておきましょう。

  1. 【初心者向け】JavaScriptのFileとFileReaderを使ってファイルを読み込む方法

    JavaScriptにおけるFileとFileReaderとは? JavaScriptでは、<input type=file>要素を使うことで、ユーザーにローカルファイルを選択させることができます。選択されたファイルはFileオブジェクトとして取得でき、ファイル名・サイズ・MIMEタイプなどの基本情報へアクセス可能です。 さらに、FileReaderオブジェクトを利用すれば、選択されたファイルの中身を非同期で読み込み、テキストやデータURLとして扱うことができます。 サンプルコード 以下は、JavaScriptでFileとFileReaderを使用して、ファイルの詳細情報を表示し

  2. JavaScriptでfalsy値(偽と評価される値)を見分ける方法

    JavaScriptにおけるfalsy値とはJavaScriptでは、値をBoolean型として評価したときに「false」とみなされる値がいくつか存在します。これらは「falsy値(偽の値)」と呼ばれます。条件分岐や論理演算において、意図しない動作を防ぐために、どの値がfalseと評価されるかを正しく理解しておくことが重要です。JavaScriptでfalseと評価される主な値は以下の通りです。false — Boolean型のfalseそのもの0 — 数値のゼロ空文字列:、、または ``(テンプレートリテラル)null — 値が存在しないことを示す特殊な値undefined — 値が未定義