Dziennik krok 1: wszystko w jednym bloku

Projekt: dziennik ocen krok po kroku - JavaScript od podstaw: konsola (JavaScript)

Pierwsza działająca wersja, napisana "od góry do dołu". Dane to tekst: każdy wiersz to `uczeń;przedmiot;ocena`. Program dzieli tekst na wiersze, sumuje oceny w czterech obiektach (sumy i liczby osobno dla uczniów i przedmiotów), wypisuje średnie i szuka najlepszej. Działa, ale ten sam kawałek kodu (dopisanie oceny do sumy) jest napisany dwa razy, a wszystko jest w jednym miejscu. Kolejne kroki nie zmienią wyniku, zmienią kod.

const DATA = `Ola;matematyka;5
Jan;matematyka;3
Ola;polski;4
Ewa;matematyka;6
Jan;polski;2
Ewa;polski;5
Ola;matematyka;6
Jan;matematyka;4`;
const lines = DATA.split('\n');
const studentSum = {};
const studentCount = {};
const subjectSum = {};
const subjectCount = {};

for (const line of lines) {
  const parts = line.split(';');
  const name = parts[0];
  const subject = parts[1];
  const grade = Number(parts[2]);
  if (studentSum[name] === undefined) {
    studentSum[name] = 0;
    studentCount[name] = 0;
  }
  studentSum[name] += grade;
  studentCount[name]++;
  if (subjectSum[subject] === undefined) {
    subjectSum[subject] = 0;
    subjectCount[subject] = 0;
  }
  subjectSum[subject] += grade;
  subjectCount[subject]++;
}

console.log('Uczniowie:');
let bestName = '';
let bestAvg = 0;
for (const name in studentSum) {
  const avg = studentSum[name] / studentCount[name];
  console.log(name + ': ' + avg.toFixed(2));
  if (avg > bestAvg) {
    bestAvg = avg;
    bestName = name;
  }
}
console.log('Przedmioty:');
for (const subject in subjectSum) {
  const avg = subjectSum[subject] / subjectCount[subject];
  console.log(subject + ': ' + avg.toFixed(2) + ' (ocen: ' + subjectCount[subject] + ')');
}
console.log('Najlepsza średnia: ' + bestName + ' (' + bestAvg.toFixed(2) + ')');

Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.

Wszystkie lekcje kursu JavaScript od podstaw: konsola·Zaloguj się, aby zapisać postęp na koncie.