JavaScriptで2つの配列の対応する要素を乗算して合計する方法
本記事では、同じ長さの2つの配列を受け取り、それぞれの対応するインデックス同士の値を掛け合わせ、その結果をすべて合計した値を返すJavaScript関数の作成方法を解説します。
やりたいこと
例えば、次のような入力配列が与えられた場合を考えてみましょう。
const arr1 = [2, 3, 4, 5]; const arr2 = [4, 3, 3, 1];
この場合、期待される出力は 34 です。計算式は以下の通り、各インデックスの値同士を掛けて足し合わせています。
(4*2 + 3*3 + 4*3 + 5*1) = 34
このような処理は、数学でいう内積(ドット積)の計算と同じ考え方であり、ベクトル演算やスコア計算など、さまざまな場面で活用できます。
実装例:forループを使う方法
まずは最もシンプルな、forループを使った実装です。
const arr1 = [2, 3, 4, 5];
const arr2 = [4, 3, 3, 1];
const produceAndAdd = (arr1 = [], arr2 = []) => {
let sum = 0;
for (let i = 0; i < arr1.length; i++) {
const product = arr1[i] * arr2[i];
sum += product;
}
return sum;
};
console.log(produceAndAdd(arr1, arr2));コードのポイント
- 引数にデフォルト値
[]を設定することで、引数が渡されなかった場合でもエラーにならないようにしています。 - ループの中で
arr1[i] * arr2[i]により同じ位置の要素同士を掛け、その都度sumに加算していきます。 - ループ完了後、合計値を返します。
出力結果
コンソールには以下のように表示されます。
34
別の書き方:reduce()メソッドを使う方法
より関数型的で簡潔なアプローチとしては、Array.prototype.reduce() を使う方法もあります。
const produceAndAdd = (arr1 = [], arr2 = []) =>
arr1.reduce((sum, value, index) => sum + value * arr2[index], 0);
console.log(produceAndAdd([2, 3, 4, 5], [4, 3, 3, 1])); // 34この書き方では、初期値 0 からスタートし、各要素ごとに「対応する要素同士の積」を累積していきます。変数宣言やループ処理が不要になり、コードが短く、意図も明確になるため、実務でもよく使われるパターンです。
まとめ
2つの配列の対応する要素を乗算して合計する処理は、内積計算の基本形です。可読性を重視して段階的に処理を追いたい場合はforループ、簡潔さを重視する場合は reduce() を使うとよいでしょう。どちらの方法でも同じ結果が得られるので、プロジェクトのコーディング規約やチームのスタイルに合わせて使い分けるのがおすすめです。
-
JavaScriptで2つの配列を乗算する方法|forループとmap()の実装例
JavaScriptで2つの配列の各要素同士を乗算し、その結果を新しい配列として取得する方法を解説します。基本的にはforループでインデックスを順番に処理しながら、対応する位置にある要素同士を掛け合わせていくシンプルなアプローチです。 2つの配列を乗算するサンプルコード 以下の例では、「CLICK HERE」ボタンをクリックすると、配列 arr と arr1 の対応する要素が乗算され、結果が新しい配列 multArray に格納された上で画面に表示されます。 <!DOCTYPE html> <html lang=en> <head> <meta ch
-
JavaScriptで2つの配列をマージして重複を削除する方法
課題 JavaScriptで、2つの数値の配列 arr1 と arr2 を引数として受け取る関数を作成することを考えます。 この関数は、両方の配列の要素を1つの新しい配列にマージします。マージの前後いずれかの時点で重複する要素が存在した場合には、余分なコピーを削除し、各要素が必ず1回だけ現れるようにしなければなりません。 要素の並び順は厳密には問われませんが、各要素の出現回数(必ず1回であること)が重要なポイントになります。 入力例 const arr1 = [6, 5, 2, 1, 8]; const arr2 = [3, 4, 6, 8, 9]; この場合、期待される出力は次のとおりです。