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.