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

JavaScriptで3つの配列に共通する要素の合計を求める方法

問題

今回は、3つの数値型配列を引数として受け取るJavaScript関数を作成します。この関数は、3つの配列すべてに共通して存在する要素だけを抜き出し、それらの合計値を返す必要があります。

たとえば、次のような配列が与えられた場合を考えてみましょう。

const arr1 = [4, 4, 5, 8, 3];
const arr2 = [7, 3, 7, 4, 1];
const arr3 = [11, 0, 7, 3, 4];

この場合、3つの配列すべてに存在するのは「4」と「3」なので、期待される出力は 4 + 3 = 7 となります。

解決策のコード例

以下がその実装コードです。

const arr1 = [4, 4, 5, 8, 3];
const arr2 = [7, 3, 7, 4, 1];
const arr3 = [11, 0, 7, 3, 4];

const sumCommon = (arr1 = [], arr2 = [], arr3 = []) => {
    let sum = 0;
    for(let i = 0; i < arr1.length; i++){
        const el = arr1[i];
        const ind2 = arr2.indexOf(el);
        const ind3 = arr3.indexOf(el);
        if(ind2 !== -1 && ind3 !== -1){
            arr2.splice(ind2, 1);
            arr3.splice(ind3, 1);
            sum += el;
        };
    };
    return sum;
};

console.log(sumCommon(arr1, arr2, arr3));

出力結果

7

コードの解説

このアプローチのポイントは、以下の手順にあります。

まず、基準となる最初の配列(arr1)をループで走査し、各要素について残りの2つの配列内に同じ値が存在するかどうかを indexOf() メソッドで確認します。indexOf() は要素が見つからない場合に -1 を返すため、両方の結果が -1 以外であれば、その要素は3つの配列すべてに共通していると判断できます。

ここで重要なのが、一致が見つかった際に splice() を使って該当要素を arr2 と arr3 から削除している点です。これにより、重複した要素が誤って複数回カウントされることを防いでいます。上記の例では、arr1 に「4」が2つ含まれていますが、arr2 側の「4」は1度目のマッチングで消費されるため、2つ目の「4」は合計に加算されません。

条件を満たした要素だけを変数 sum に加算していき、ループ完了後にその合計値を返すことで、求めていた結果「7」が得られます。

  1. JavaScriptで長方形内に埋め込まれた正方形の周囲長の合計を求める方法

    問題 下図のように、1つの長方形の中に正方形が5つ埋め込まれている状況を考えてみましょう。 このとき、それぞれの正方形の周囲長は次のようになります。 4 + 4 + 8 + 12 + 20 = 48 単位 一見すると複雑な計算が必要そうに思えますが、よく観察すると各正方形の一辺の長さがフィボナッチ数列(1, 1, 2, 3, 5, ...)に従っていることが分かります。つまり、n個の正方形が埋め込まれている場合、周囲長の合計は「最初のn項のフィボナッチ数の総和 × 4」で求められるのです。 そこで本記事では、数値 n を引数として受け取り、n個の正方形が埋め込まれた場合の周囲長の合計を返す

  2. JavaScriptで配列内の特定の数値に最も近い2つの要素を検索する方法

    問題の概要JavaScriptで、ソート済みの整数配列 arr を第一引数に、目標となる数値 target を第二引数に受け取る関数を作成します。この関数は、配列内に存在する要素の中から target に最も近い2つの数値を選び、それらを昇順に並べた配列として返す必要があります。例えば、以下のような入力が与えられた場合を考えてみましょう。入力:const arr = [1, 2, 3, 4, 5];const target = 3;出力:const output = [2, 3];この場合、target の値が 3 であるため、最も近い2つの要素は 2 と 3 となり、昇順に並べて [2, 3