練習問題①:calcStats(numbers)
数値の配列を受け取り、合計(sum)、平均(average)、最大値(max)、最小値(min) をオブジェクトで返す関数を作る。
✅ 模範解答
function calcStats(numbers) {
const sum = numbers.reduce((total, n) => total + n, 0); // 配列の合計
const average = sum / numbers.length; // 平均
const max = Math.max(...numbers); // 最大値
const min = Math.min(...numbers); // 最小値
return { sum, average, max, min };
}
// 実行例
const stats = calcStats([10, 20, 30, 40, 50]);
console.log(stats);
// { sum: 150, average: 30, max: 50, min: 10 }
JavaScriptステップ解説
- 合計を計算:
reduceで配列のすべての数を足す。
→[10,20,30,40,50]→10+20+30+40+50 = 150 - 平均を計算:
合計 ÷ 配列の長さ →150 ÷ 5 = 30 - 最大値・最小値を計算:
Math.max(...numbers)→ 50Math.min(...numbers)→ 10 - オブジェクトで返す:
{ sum, average, max, min }で呼び出し側でも意味が分かりやすい。
💡 ポイント
- 配列のスプレッド
...numbersでMath.max/Math.minが使える。 - 名前付きで返すので、呼び出し側で順序を気にせずアクセス可能。
練習問題②:swap(a, b)
2つの値を入れ替えて配列で返す関数を作る。
✅ 模範解答
function swap(a, b) {
return [b, a]; // 順番を入れ替えて配列で返す
}
// 実行例
let [x, y] = swap(5, 10);
console.log(x); // 10
console.log(y); // 5
JavaScriptステップ解説
- 関数に
a=5, b=10が入る。 [b, a]で配列[10, 5]を作る。- 分割代入
[x, y] = ...でx=10, y=5に代入される。 - 元の値
5, 10が入れ替わった状態で使える。
💡 ポイント
- 配列で返すことで、順序さえ覚えていれば簡単に値を入れ替えられる。
- 関数の外で
[x, y] = swap(x, y)と書くと便利。 - オブジェクトで返すことも可能だが、配列で返す方が「順序重視」の場合は短く書ける。
まとめ(両方の問題から学べること)
| テーマ | 配列で返す | オブジェクトで返す |
|---|---|---|
| 複数値を順序で管理したい | ✅ swapのように簡単 | ❌ 順序に意味がないので不向き |
| 複数値に意味がある | ⚠ 順序を覚える必要がある | ✅ calcStatsやminMaxIndicesのように名前付きで安全 |
| 初心者向け | 配列は簡単だが意味が分かりにくい場合がある | オブジェクトで返すと読みやすい、順序に依存しない |
