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

【JavaScript】配列の各要素に対して「自分以外の全要素の積」を求める方法

今回は、数値の配列を引数として受け取る関数を作成する方法を解説します。この関数は、現在計算中のインデックスの値を除いた、それ以外のすべての数値の積からなる新しい配列を返します。

問題の概要

具体的に説明しましょう。たとえば、配列 arr が5つのインデックスを持っていて、インデックス1の値を作成する場合、インデックス0、2、3、4の数値同士を掛け合わせます。

同様に、インデックス2の値を作成する場合は、インデックス0、1、3、4の数値を掛け合わせます。以降も同じ要領で処理を進めていきます。

注意: この問題では、配列内のすべての要素がゼロではないことが保証されています。そのため、割り算による除算エラーを気にする必要はありません。

解決のアプローチ

この問題は非常にシンプルな発想で解くことができます。

まず reduce() メソッドを使って配列全体の積を一度だけ計算します。その後、map() メソッドで配列をループしながら、各インデックスの値を「全体の積 ÷ そのインデックスの元の値」で求めます。

これにより、余分な掛け算の繰り返しを避けつつ、効率的に結果を導き出せます。

実装コード例

const arr = [12, 10, 8, 6, 5, 2];
const produceArray = (arr) => {
    const product = arr.reduce((acc, val) => acc*val);
    return arr.map(el => {
        return product/el;
    });
};
console.log(produceArray(arr));

コードのポイント

reduce((acc, val) => acc*val) の部分で配列全体の総乗(すべての要素を掛け合わせた値)を算出し、続く map(el => product/el) で各要素ごとに自分自身を除いた積を計算しています。計算量はO(n)と効率的です。

実行結果

上記のコードをコンソールで実行すると、次のような出力が得られます。

[ 4800, 5760, 7200, 9600, 11520, 28800 ]

それぞれの要素が、「自分以外のすべての要素の積」と一致していることが確認できます。ぜひ実際にコードを実行して、動作を体感してみてください。

  1. JavaScriptのfindIndex()メソッドの使い方を徹底解説

    JavaScriptのfindIndex()メソッドは、配列の中から条件に合致する最初の要素を見つけ、そのインデックス(添字)を返すためのメソッドです。条件を満たす要素が存在しない場合は「-1」が返されます。配列の検索処理において、要素そのものではなく「位置」を知りたい場合に非常に便利なメソッドです。findIndex()の基本構文array.findIndex(function(currentValue, index, arr), thisValue)各引数の意味は以下の通りです。currentValue:現在処理中の要素の値index:現在処理中の要素のインデックス(省略可能)arr:対象

  2. 【C++】配列内のすべての素数の積を求める方法

    整数型配列 arr[] が与えられたとき、その配列に含まれるすべての素数を見つけ出し、それらの積を計算するのが本記事のテーマです。素数とは、1とその数自身でしか割り切れない正の整数のことです。たとえば、2、3、5、7、11などが素数に該当します。それでは、次の配列を例に解を求めてみましょう。入力: arr[] = { 11, 20, 31, 4, 5, 6, 70 }出力: 1705説明: 配列内の素数は 11、31、5 の3つであり、その積は 11 × 31 × 5 = 1705 となります。入力: arr[] = { 1, 2, 3, 4, 5, 6, 7 }出力: 210説明: 配列内の