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

JavaScriptで合計値が最大となるサブ配列のインデックスを返す方法

数値を要素に持つ「配列の配列」(ネストされた配列)が与えられたとき、各サブ配列の合計値を比較し、その合計が最大となるサブ配列のインデックスを返す関数を作成してみましょう。同じ最大値を持つサブ配列が複数存在する場合は、最初に出現したもののインデックスを返すのが条件です。

それでは、実際のコードを見ていきましょう。

コード例

const arr = [[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]];
const findMaxSubArray = (arr) => {
   const add = (array) => array.reduce((acc, val) => acc + val);
   return arr.reduce((acc, val, ind) => {
      const sum = add(val);
      if(sum > acc.sum){
         return {
            index: ind,
            sum
         };
      };
      return acc;
   }, {
      index: -1,
      sum: -Infinity
   }).index;
};
console.log(findMaxSubArray(arr));

処理の流れ

まず、ヘルパー関数 add を定義し、reduce() メソッドを使って配列内の全要素の合計を計算できるようにしています。

次に、外側の配列に対しても reduce() を適用します。アキュムレータの初期値は { index: -1, sum: -Infinity } としており、これによりどのような負の値でも正しく比較できるようになっています。ループの中では各サブ配列の合計を順番に算出し、これまでの最大値よりも大きい場合のみ、インデックスと合計値でアキュムレータを更新します。

比較に厳密な不等号(>)を使用しているため、合計が同点のサブ配列が複数ある場合でも、後続のものは上書きされず、必ず最初のサブ配列のインデックスが返されます。

出力

コンソールには次のように表示されます。

3

この例では、4番目のサブ配列 [1000, 1001, 857, 1] の合計が 2859 となり最も大きいため、そのインデックスである 3 が出力されます。

  1. JavaScriptで配列の合計と積の絶対差を求める方法

    本記事では、数値の配列を唯一の引数として受け取り、配列内のすべての数値の合計と積を計算し、その絶対差を返すJavaScript関数の実装方法を解説します。例えば、配列 [1, 4, 1, 2, 1, 6, 3] の場合、合計は 18、積は 144 となるため、返される値は |18 − 144| = 126 になります。実装コード以下がそのコード例です −const arr = [1, 4, 1, 2, 1, 6, 3]; const sumProductDifference = (arr = []) => {     const creds = a

  2. JavaScriptで配列から最大の「1度だけ現れる数値」を見つける方法

    本記事では、整数の配列を第1引数(かつ唯一の引数)として受け取るJavaScript関数を作成する方法を解説します。この関数の役割は、配列を順番に走査し、その中で一度だけ出現する数値のうち最大のものを見つけ出して返すことです。もし配列内に一意な数値がひとつも存在しない場合は、-1を返す仕様とします。前提となる制約配列の各要素には次の制約が与えられています。つまり、すべての要素は0より大きく101未満であることが保証されています。0 < arr[i] < 101具体例たとえば、入力配列が以下のような場合を考えてみましょう。const arr = [35, 37, 33, 39, 34