JavaScript | 最大値と最小値のインデックスも一緒に返す関数

JavaScript JavaScript
スポンサーリンク

では「最大値と最小値のインデックスも一緒に返す関数」を作ってみましょう。
これは 値と位置を両方追跡する 練習です。


目標

  • 配列を順番に調べる
  • 最大値と最小値を見つけると同時に、そのインデックスも記録する
  • { max: 値, maxIndex: インデックス, min: 値, minIndex: インデックス } の形で返す

✅ 模範解答(for文バージョン)

function findMaxAndMinWithIndex(arr) {
  if (arr.length === 0) return null; // 空配列ならnull

  let max = arr[0];
  let min = arr[0];
  let maxIndex = 0;
  let minIndex = 0;

  for (let i = 1; i < arr.length; i++) {
    if (arr[i] > max) {
      max = arr[i];
      maxIndex = i;
    }
    if (arr[i] < min) {
      min = arr[i];
      minIndex = i;
    }
  }

  return { max, maxIndex, min, minIndex };
}

// 実行例
console.log(findMaxAndMinWithIndex([3, 7, 2, 9, 5]));
// { max: 9, maxIndex: 3, min: 2, minIndex: 2 }
JavaScript

✅ 模範解答(for…of + entriesバージョン)

function findMaxAndMinWithIndex(arr) {
  if (arr.length === 0) return null;

  let max = arr[0];
  let min = arr[0];
  let maxIndex = 0;
  let minIndex = 0;

  for (const [i, num] of arr.entries()) {
    if (num > max) {
      max = num;
      maxIndex = i;
    }
    if (num < min) {
      min = num;
      minIndex = i;
    }
  }

  return { max, maxIndex, min, minIndex };
}

console.log(findMaxAndMinWithIndex([10, 25, 7, 30, 18]));
// { max: 30, maxIndex: 3, min: 7, minIndex: 2 }
JavaScript

✅ 模範解答(forEachバージョン)

function findMaxAndMinWithIndex(arr) {
  if (arr.length === 0) return null;

  let max = arr[0];
  let min = arr[0];
  let maxIndex = 0;
  let minIndex = 0;

  arr.forEach((num, i) => {
    if (num > max) {
      max = num;
      maxIndex = i;
    }
    if (num < min) {
      min = num;
      minIndex = i;
    }
  });

  return { max, maxIndex, min, minIndex };
}

console.log(findMaxAndMinWithIndex([4, 12, 8, 6]));
// { max: 12, maxIndex: 1, min: 4, minIndex: 0 }
JavaScript

💡 解説

  • 最大値と最小値を同時に追跡するので、変数を4つ(値とインデックスそれぞれ)用意する。
  • for...of でインデックスも欲しいときは arr.entries() を使うと便利。
  • 空配列のときは null を返すようにして安全にする。

🔥 発展練習

  • 最大値と最小値の「差」を計算して返す関数を作る
  • 文字列配列で「最も長い文字列とそのインデックス」「最も短い文字列とそのインデックス」を返す

タイトルとURLをコピーしました