Вивчай
Домашнє завдання #11 ·
балівintermediate

Робота з масивом студентів

Комплексне завдання на масиви, об'єкти та функціональні методи. Працюватимеш з реалістичним набором даних.


Вихідні дані

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

Створи функцію, що одним ланцюжком:

  1. Відбирає студентів, що вивчають JS
  2. Сортує за оцінкою (від найвищої)
  3. Бере перших 3
  4. Повертає масив імен
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