JavaScriptで2つの配列のサブセット(部分集合)を判定する方法
リテラル値からなる2つの配列を受け取り、第2引数の配列が第1引数の配列の部分集合(サブセット)であるかどうかを判定するJavaScript関数を作成する必要があります。
この判定を行う際には、以下の条件を考慮する必要があります。
array2には、array1に含まれるすべての値が定義されている必要がある
array1に重複した値が存在する場合、その重複数もarray2側で考慮されなければならない
具体例
たとえば、arr1 = ["a", "a"] と arr2 = ["b", "a"] を比較すると、「a」は最初の配列に2回登場していますが、2番目の配列では1回しか登場していないため、isSubset の結果は false となります。
実装コード
実際のコードは以下のようになります。
const isSubset = (arr1, arr2) => {
const count = (arr, ind) => {
let i = arr.length;
while (i--) hash[arr[i]] = (hash[arr[i]] || 0) + ind;
}
const hash = {};
let i, keys;
count(arr1, 1);
count(arr2, -1);
keys = Object.keys(hash);
i = keys.length;
while (i--) {
if (hash[keys[i]]){
return false;
};
};
return true;
}
console.log(isSubset(["B", "A", "C", "A"], ["A", "B", "C", "A"]));
console.log(isSubset(["B", "A", "C", "A"], ["A", "B", "C", "D"]));実行結果
コンソールに出力される結果は以下の通りです。
true false
この関数では、ハッシュオブジェクトを使って各要素の出現回数をカウントしています。第1引数の配列では +1、第2引数の配列では -1 として加算し、最終的にすべてのキーの値が0になれば第2引数の配列は第1引数の配列の完全なサブセットであると判定されます。重複要素も正しく処理されるため、単純な存在チェックよりも厳密な判定が可能です。
-
JavaScriptで2つの配列を結合する方法【concat()とスプレッド構文】
JavaScriptで2つの配列を1つにまとめたい場合、最も一般的なのが concat() メソッドです。このメソッドは、元の配列を変更することなく、複数の配列や値を連結した新しい配列を返します。 concat()メソッドの基本構文 let 新しい配列 = 配列A.concat(配列B); サンプルコード 以下は、ボタンをクリックすると2つの配列を結合し、その結果を画面に表示する完全なサンプルです。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8&
-
JavaScriptで2つの配列を乗算する方法|forループとmap()の実装例
JavaScriptで2つの配列の各要素同士を乗算し、その結果を新しい配列として取得する方法を解説します。基本的にはforループでインデックスを順番に処理しながら、対応する位置にある要素同士を掛け合わせていくシンプルなアプローチです。 2つの配列を乗算するサンプルコード 以下の例では、「CLICK HERE」ボタンをクリックすると、配列 arr と arr1 の対応する要素が乗算され、結果が新しい配列 multArray に格納された上で画面に表示されます。 <!DOCTYPE html> <html lang=en> <head> <meta ch