では「最大値と最小値のインデックスも一緒に返す関数」を作ってみましょう。
これは 値と位置を両方追跡する 練習です。
目標
- 配列を順番に調べる
- 最大値と最小値を見つけると同時に、そのインデックスも記録する
{ 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を返すようにして安全にする。
🔥 発展練習
- 最大値と最小値の「差」を計算して返す関数を作る
- 文字列配列で「最も長い文字列とそのインデックス」「最も短い文字列とそのインデックス」を返す
