JavaScriptで複数のブール値配列をOR演算子(||)でマージする方法
問題の概要
以下のような、ブール値(true / false)からなる2次元配列があったとします。
const arr = [[true,false,false],[false,false,false],[false,false,true]];
この配列に含まれる各サブ配列の対応する要素同士を、OR演算子(||)で結合して、1次元の配列にマージする関数を作成します。
イメージとしては、各サブ配列の同じインデックス位置にある要素を縦方向に見ていき、「1つでも true があれば true」「すべて false なら false」となる配列を返す処理です。
実装方法:Array.prototype.reduce() を活用
この種の集約処理には Array.prototype.reduce() が最適です。初期値として空の配列を用意し、各サブ配列の要素を順番に既存の結果と OR 演算しながら蓄積していきます。
コード例
const arr = [[true,false,false],[false,false,false],[false,false,true]];
const orMerge = arr => {
return arr.reduce((acc, val) => {
val.forEach((bool, ind) => acc[ind] = acc[ind] || bool);
return acc;
}, []);
};
console.log(orMerge(arr));処理の流れ
reduce()の初期値(アキュムレータacc)として空の配列を指定します。- 各サブ配列
valに対してforEach()でループ処理を行います。 acc[ind] = acc[ind] || boolにより、同じインデックス位置の要素どうしを論理ORで結合していきます。
出力結果
コンソールには以下のように出力されます。
[ true, false, true ]
結果の内訳を確認してみましょう。
- 1番目の要素:
true || false || false→ true - 2番目の要素:
false || false || false→ false - 3番目の要素:
false || false || true→ true
別解:map() を使った書き方
サブ配列の長さがすべて同じ場合は、Array.prototype.map() を使ってより簡潔に書くこともできます。
const orMerge = arr =>
arr[0].map((_, ind) => arr.some(row => row[ind]));
console.log(orMerge(arr)); // [ true, false, true ]こちらは先頭のサブ配列を基準に各インデックスを走査し、その位置に true が存在するかどうかを some() で判定するアプローチです。状況に応じて読みやすい方を選択するとよいでしょう。
-
JavaScriptのnew演算子とは?オブジェクト生成の基本をサンプルコードで解説
new演算子の基本的な役割 JavaScriptにおけるnew演算子は、ユーザーが定義したオブジェクト型や、コンストラクタ関数を持つ組み込みオブジェクト型のインスタンスを新しく生成するために使用されます。 new演算子を使うことで、同じ構造を持つ複数のオブジェクトを効率よく作成でき、コードの再利用性や保守性が大きく向上します。 new演算子の使用例 以下は、JavaScriptでnew演算子を使用した実際のコード例です。 <!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> &l
-
JavaScriptでinnerHTMLを設定する方法をわかりやすく解説
JavaScriptでHTML要素の内容を動的に書き換えたい場合に便利なのが、innerHTMLプロパティです。innerHTMLを使えば、指定した要素の中にHTML文字列をそのまま挿入・置き換えることができます。本記事では、innerHTMLを設定する正しい構文と、実際に動作するサンプルコードを初心者向けに解説します。 innerHTMLを設定する正しい構文 innerHTMLを設定する際の正しい構文は以下のとおりです。 document.getElementById(yourIdName).innerHTML=yourValue; この構文では、まずgetElementById()メソッド