JavaScriptチャレンジ:3つのスコアの平均点から成績を判定する関数を作ってみよう
今回は、引数として渡された3つのスコアの平均値を求め、その平均点に対応する成績(グレード)を返す関数をJavaScriptで作成する課題に取り組みます。
成績判定の基準
平均点と成績の対応関係は、以下の表のとおりです。
| 平均点 | 成績 |
|---|---|
| 90〜100点 | A |
| 80〜89点 | B |
| 70〜79点 | C |
| 60〜69点 | D |
| 59点以下 | F |
実装例
それでは、実際のコードを見てみましょう。
const findGrade = (...scores) => {
const {
length
} = scores;
const sum = scores.reduce((acc, val) => acc + val);
const score = sum / length;
if (score >= 90 && score <= 100) {
return 'A';
}
else if (score >= 80 ) {
return 'B';
} else if (score >= 70 ) {
return 'C';
} else if (score >= 60) {
return 'D';
} else{
return 'F';
};
}
console.log(findGrade(5,40,93));
console.log(findGrade(30,85,96));
console.log(findGrade(92,70,40));
コードの解説
このコードでは、以下のような流れで処理を行っています。
- 可変長引数による受け取り:スプレッド構文
(...scores)を使うことで、任意の個数のスコアを受け取れる柔軟な設計になっています。 - 合計値の計算:
reduce()メソッドを使い、すべてのスコアを足し合わせて合計点を求めます。 - 平均点の算出:合計点を科目数(
scores.length)で割ることで平均点を計算します。 - 条件分岐による成績判定:
if / else if文で平均点がどの範囲に属するかを上から順にチェックし、該当する成績を返します。90〜100点の範囲チェックには論理AND演算子&&を使用しています。
出力結果
このコードを実行すると、コンソールには以下のように出力されます。
F C D
各呼び出しごとの平均点と判定結果は、以下のとおりです。
findGrade(5, 40, 93)→ 平均46点 → FfindGrade(30, 85, 96)→ 平均約70.3点 → CfindGrade(92, 70, 40)→ 平均約67.3点 → D
まとめ
このように、reduce() による集計と条件分岐を組み合わせるだけで、シンプルながら実用的な成績判定関数を作成できます。配列操作と条件分岐の基本を同時に学べる、初心者に最適な練習課題と言えるでしょう。
-
JavaScriptのPromise(プロミス)とは?非同期処理の基本と使い方を解説
JavaScriptのPromise(プロミス)は、作成された時点ではまだ値が確定していない非同期処理を扱うためのオブジェクトです。APIリクエストやファイルの読み込みなど、完了まで時間がかかる処理について、「いずれ結果を受け取る」という約束を表現します。Promiseは、以下の3つの状態を持ちます。pending(保留中):処理がまだ完了しておらず、成功も失敗も確定していない初期状態fulfilled(履行済み):処理が正常に完了し、結果の値が利用できる状態rejected(拒否済み):処理が失敗し、エラーの理由が利用できる状態一度fulfilledまたはrejectedに遷移したPromi
-
JavaScriptのWeakSetとは?特徴と主要メソッド、サンプルコードをわかりやすく解説
JavaScriptのWeakSet(ウィークセット)は、オブジェクトを格納するためのコレクションです。Setと同様に、同じオブジェクトを重複して保存することはできません。WeakSetの主な特徴弱い参照で保持する:WeakSet内のオブジェクトへの参照が他に存在しなくなると、ガベージコレクションによって自動的にメモリから解放されます。そのため、メモリリークを防ぎたい場面で役立ちます。オブジェクトのみ格納可能:数値や文字列などのプリミティブ値は追加できません。列挙できない:Setのようなsizeプロパティや反復処理の仕組みを持たず、格納されている要素の一覧を取得することはできません。WeakS