Dziennik krok 2: funkcje zamiast powtórzeń

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

Refaktoryzacja: powtórzony kod staje się funkcją. `parseLine` zamienia wiersz na obiekt, `addGrade` dopisuje ocenę do statystyk (obiekt `{ sum, count }` zamiast dwóch osobnych obiektów), `average` liczy średnią. Cztery obiekty zamieniły się w dwa, a najlepszy uczeń to jeden obiekt `best` zamiast dwóch zmiennych. Wynik bez zmian.

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`;
function parseLine(line) {
  const [name, subject, grade] = line.split(';');
  return { name, subject, grade: Number(grade) };
}

function addGrade(stats, key, grade) {
  if (stats[key] === undefined) stats[key] = { sum: 0, count: 0 };
  stats[key].sum += grade;
  stats[key].count++;
}

function average(stat) {
  return stat.sum / stat.count;
}

const students = {};
const subjects = {};
for (const line of DATA.split('\n')) {
  const r = parseLine(line);
  addGrade(students, r.name, r.grade);
  addGrade(subjects, r.subject, r.grade);
}

console.log('Uczniowie:');
let best = null;
for (const name in students) {
  const avg = average(students[name]);
  console.log(`${name}: ${avg.toFixed(2)}`);
  if (best === null || avg > best.avg) best = { name, avg };
}
console.log('Przedmioty:');
for (const subject in subjects) {
  console.log(`${subject}: ${average(subjects[subject]).toFixed(2)} (ocen: ${subjects[subject].count})`);
}
console.log(`Najlepsza średnia: ${best.name} (${best.avg.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.