Робота з масивом студентів
Комплексне завдання на масиви, об'єкти та функціональні методи. Працюватимеш з реалістичним набором даних.
Вихідні дані
const students = [
{ name: "Олексій Бойко", age: 20, grade: 85, city: "Київ", courses: ["JS", "React"] },
{ name: "Марія Коваленко", age: 22, grade: 92, city: "Львів", courses: ["JS", "Node.js", "React"] },
{ name: "Іван Петренко", age: 19, grade: 67, city: "Київ", courses: ["HTML", "CSS"] },
{ name: "Анна Шевченко", age: 21, grade: 95, city: "Одеса", courses: ["JS", "TypeScript", "React"] },
{ name: "Дмитро Ткаченко", age: 23, grade: 78, city: "Харків", courses: ["Python", "Django"] },
{ name: "Олена Мельник", age: 20, grade: 88, city: "Київ", courses: ["JS", "React", "Next.js"] },
{ name: "Сергій Бондаренко", age: 24, grade: 55, city: "Львів", courses: ["HTML", "CSS", "JS"] },
{ name: "Юлія Кравченко", age: 21, grade: 91, city: "Дніпро", courses: ["JS", "Vue.js"] },
{ name: "Артем Лисенко", age: 19, grade: 73, city: "Одеса", courses: ["JS", "React"] },
{ name: "Катерина Попова", age: 22, grade: 96, city: "Київ", courses: ["JS", "TypeScript", "React", "Next.js"] },
];
Завдання
Створи наступні функції. Кожна повинна використовувати методи масивів (filter, map, sort, reduce, find).
1. Фільтрація
// a) Відмінники (grade >= 90)
function getTopStudents(students) { }
// → [Марія, Анна, Юлія, Катерина]
// b) Студенти з конкретного міста
function getStudentsByCity(students, city) { }
// getStudentsByCity(students, "Київ") → [Олексій, Іван, Олена, Катерина]
// c) Студенти, що вивчають конкретний курс
function getStudentsByCourse(students, course) { }
// getStudentsByCourse(students, "React") → [Олексій, Марія, Анна, Олена, Артем, Катерина]
2. Сортування
// a) За оцінкою (від найвищої)
function sortByGrade(students) { }
// b) За ім'ям (алфавітно)
function sortByName(students) { }
// c) За кількістю курсів (від найбільшої)
function sortByCourseCount(students) { }
3. Агрегація
// a) Середня оцінка
function getAverageGrade(students) { }
// → 82
// b) Статистика по містах: { місто: кількість_студентів }
function getCityStats(students) { }
// → { "Київ": 4, "Львів": 2, "Одеса": 2, "Харків": 1, "Дніпро": 1 }
// c) Найпопулярніші курси: [{ course, count }] відсортовані за популярністю
function getPopularCourses(students) { }
// → [{ course: "JS", count: 8 }, { course: "React", count: 6 }, ...]
4. Трансформація
// a) Масив рядків "Ім'я (Місто) — grade балів"
function formatStudents(students) { }
// → ["Олексій Бойко (Київ) — 85 балів", ...]
// b) Додати поле status: "excellent" (>=90), "good" (>=70), "needs-work" (<70)
function addStatus(students) { }
// → [{...student, status: "good"}, ...]
Частина 5 (бонус): Складний pipeline
Створи функцію, що одним ланцюжком:
- Відбирає студентів, що вивчають JS
- Сортує за оцінкою (від найвищої)
- Бере перших 3
- Повертає масив імен
function topJSStudents(students) { }
// → ["Катерина Попова", "Анна Шевченко", "Марія Коваленко"]
Підказки
- Для сортування рядків:
a.name.localeCompare(b.name) - Для підрахунку курсів використай
reduceз об'єктом-лічильником [...students].sort()щоб не змінювати оригінальний масивarray.includes()для перевірки чи курс є в списку
Критерії оцінки
| Критерій | Бали |
|---|---|
| Фільтрація (3 функції) | 25 |
| Сортування (3 функції) | 20 |
| Агрегація (3 функції) | 25 |
| Трансформація (2 функції) | 15 |
| Використання map/filter/reduce/sort (без for) | 15 |
| Бонус: Pipeline | +10 |