Javascript: Дешёвые отели

JS: Полиморфизм 4 сообщения
Обновлено: 04 мая, 12:37
98
Студентов
80%
Завершения

Существуют сервисы бронирования отелей, такие как Booking, Kayak, Ostrovok. Каждый из них имеет какую-то комиссию и политику ценообразования. В течение этой задачи нам предстоит реализовать API, работающее с этими сервисами и поиск самого выгодного предложения из них. Наш сервис должен показывать честную цену, с учетом всех комиссий и преобразований. Валюта отображения – рубли.

Политика ценообразования для сервисов:

Все совпадения случайны

  • Ostrovok: цену нужно увеличивать на налог 12%, платится за каждое бронирование
  • Booking: цену нужно преобразовывать из долларов в рубли по курсу 1:75
  • Kayak: никаких изменений, показывают конечную и удобную цену для нас

Описание отеля в каждом сервисе выглядит одинаково:

// cost будет разный в зависимости от сервиса и его политики ценообразования
// именно это число нужно "нормализовывать" для сравнения
const hotel = { name: 'hexletInn', cost: 600 };

src/gateway.js

Реализуйте и экспортируйте по умолчанию функцию, обрабатывающую данные от разных сервисов бронирования. Она должна устанавливать для каждого цену, с учётом коэффициента этого сервиса. Функция возвращает массив отелей и сервисов, попавших в условие. Данные для обработки берутся из файла src/data.js

import findAllMatching from './src/gateway.js';

// Цены на отели возвращаются уже в нормализованном виде
// возвращается массив отелей объединенных с именем сервиса из которого они извлекаются
const hotelInfos = findAllMatching();
// [
  // { hotel: { cost: 224, name: 'volga' }, service: 'ostrovok' }
  // { hotel: { cost: 500, name: 'hexletInn' }, service: 'booking' }
// ]

Шлюз поддерживает фильтрацию по минимальной и максимальной цене:

// По умолчанию min и max не заданы, но их можно указать
findAllMatching({ min: 200, max: 300 });

// Можно указывать только один предикат
findAllMatching({ max: 500 });
findAllMatching({ min: 100 });

src/index.js

Реализуйте логику функции, работающей со шлюзом таким образом, чтобы она принимала от пользователя диапазон цен, обращалась к сервису и выбирала из него наиболее выгодное предложение:

import findTheCheapestService from './src/index.js';

findTheCheapestService({ min: 200, max: 300 });
// { hotel: { cost: 224, name: 'volga' }, service: 'ostrovok' }

Подсказки

  • В решении учителя нет ни одной условной конструкции

Для полного доступа к испытанию нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов