JavaScript | レベル別練習問題:オブジェクト

JavaScript
スポンサーリンク

では次のステップとして、「さらにネストした配列+オブジェクト(学校→クラス→生徒→科目点数)の複合更新ステップ実行」を紹介します。


練習問題:学校データの複合更新

let school = [
    {
        className: "1年A組",
        students: [
            { 
                name: "Alice", 
                scores: { math: 95, english: 88 }, 
                passed: false, 
                honors: false 
            },
            { 
                name: "Bob", 
                scores: { math: 62, english: 70 }, 
                passed: false, 
                honors: false 
            }
        ]
    },
    {
        className: "1年B組",
        students: [
            { 
                name: "Charlie", 
                scores: { math: 78, english: 85 }, 
                passed: false, 
                honors: false 
            },
            { 
                name: "David", 
                scores: { math: 55, english: 60 }, 
                passed: false, 
                honors: false 
            }
        ]
    }
];

// 複合条件で passed と honors を更新
for (let i = 0; i < school.length; i++) {
    let classroom = school[i];
    for (let j = 0; j < classroom.students.length; j++) {
        let student = classroom.students[j];
        let avg = (student.scores.math + student.scores.english) / 2;

        if (avg >= 70) {
            student.passed = true;
            if (avg >= 90) {
                student.honors = true;
            }
        } else {
            student.passed = false;
            student.honors = false;
        }
    }
}

console.log(school);
JavaScript

出力(抜粋)

[
  {
    className: "1年A組",
    students: [
      { name: "Alice", scores: { math: 95, english: 88 }, passed: true, honors: true },
      { name: "Bob", scores: { math: 62, english: 70 }, passed: true, honors: false }
    ]
  },
  {
    className: "1年B組",
    students: [
      { name: "Charlie", scores: { math: 78, english: 85 }, passed: true, honors: false },
      { name: "David", scores: { math: 55, english: 60 }, passed: false, honors: false }
    ]
  }
]
JavaScript

ステップ実行(逐次追跡)

ij学生mathenglishavg条件評価passedhonors
00Alice958891.5avg>=70 → true, avg>=90 → truetruetrue
01Bob627066avg>=70 → falsefalsefalse
10Charlie788581.5avg>=70 → true, avg>=90 → falsetruefalse
11David556057.5avg>=70 → falsefalsefalse

解説ポイント

  1. 三重構造
    • 外側 for (i) → クラス
    • 中間 for (j) → 学生
    • 内側のオブジェクト scores → 科目点数
  2. 複合条件
    • 平均点 >= 70 → 合格
    • 平均点 >= 90 → 名誉賞
  3. 逐次追跡表での利点
    • 各学生の点数・平均・条件評価・更新プロパティを明確に確認できる
  4. 参照型
    • student の更新は school 配列に直接反映

💡 このパターンは実務で非常に頻出です:

  • 成績管理、売上データ、ユーザーアクティビティ集計など
  • ネスト構造の条件分岐とプロパティ更新を組み合わせた処理

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