Задача «Картофельная вечеринка Билли»
Перед выполнением задания внимательно прочитайте:
- О всех этапах проверки задания
- Как отправить пулл
- Как пройти тесты
- Правила оформления javascript, HTML и CSS кода
Основное задание
Мы очень хотим, чтобы код вы написали сами, а не пользовались внешними библиотеками.
Это был особый год для Билли. Долгие годы он собирал информацию о своих друзьях и аккуратно записывал в свой блокнот с милым названием «Друзья Билли». Порой информация давалась нелегко и приходилось даже немножко за ними последить.
Осень уже давно наступила, журавли улетили на юг, картофель выкопан, а яблоки собраны. Билли практически все предусмотрел и спланировал для своей картофельной вечеринки! Осталось лишь пригласить своих друзей, настоящих друзей.
Каким бы странным это не показалось, в своём бумажном блокнотике Билли хранил записи о друзьях практически в JSON формате:
[
{
name: 'Сэм',
age: 29,
gender: 'Мужской',
email: 'luisazamora@example.com',
phone: '+7 (555) 505-3570',
favoriteFruit: 'Картофель'
},
{
name: 'Эмили',
age: 30,
gender: 'Женский',
email: 'roachpugh@example.com',
phone: '+7 (555) 539-2625',
favoriteFruit: 'Яблоко'
}
]
Помогите Билли и напишите конструктор запросов lego.js, который позволял бы фильтровать коллекцию друзей, сортировать её и выбирать необходимые для Билли поля.
В качестве основного задания реализуйте базовые операторы конструктора:
.query()
– применяет операторы к коллекции друзей.select()
- выбирает необходимые поля.format()
- форматируем вывод конкретного поля.filterIn()
- фильтрует коллекцию.sortBy()
- сортирует коллекцию.limit()
- ограничивает коллекцию
Примеры использования конструктора можно посмотреть в index.js и в тестах.
Дополнительные условия и ограничения:
- В любых операторах не должна портиться начальная коллекция
- Если метод
.query()
вызвать только с коллекцией, то просто вернётся её копия - Метод
.select()
должен игнорировать несуществующие поля - Несколько вызовов метода
.select()
должны работать как один с персеченными параметрами - Фильтровать и сортировать можно по всем полям, а не только перечисленным в
.select()
- В тестах гарантируется, что метод
.sortBy()
будет вызван только один раз - В тестах гарантируется, что в метод
.sortBy()
передаются правильные значения для порядка сортировки - Методы
.limit()
и.format()
всегда отрабатывают последними, независимо от их порядка
Дополнительное задание (+6 к харизме, +4 к интеллекту)
Перед выполнением внимательно прочитайте про особенности
Для Билли будет удобно, если вы реализуете два дополнительных условных оператора .or()
и .and()
, которые позволяют объединять несколько фильтров .filterIn()
в логические цепочки.
В тестах гарантируется, что в .or()
и .and()
будут передаваться только .filterIn()
.
Примеры использования этих операторов можно посмотреть в index.js и в тестах.