Skip to content

Latest commit

 

History

History

string-prototype

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Домашнее задание к лекции 2.3 «Обертки для примитивов»

Пришло время сделать работу с товарами в нашем приложении более организованной с использованием объектов.

Перед началом работы

  1. Активируйте строгий режим соответствия.
  2. Скопируйте код ниже и вставьте его в начало своей работы:
function showSpecialPrice() {
  console.log('Введен секретный код. Все цены уменьшены вдвое!');
}

Задача № 1. Пользовательский ввод.

Наш дизайнер что-то напутал с формой заказа, и клиенты стали вводить количество в форме заказа в таком формате: 17 штук, 1,5 килограмма, 2.7 метра. От этого корзина на сайте стала показывать стоимость в виде Заказ на сумму: NaN Q, и клиенты бросают свои заказы, не закончив оформление.

Наш ведущий front-end разработчик из отпуска на Венере написал, что нужно поправить функцию fixAmount. Сейчас она выглядит так:

function fixAmount(amount) {
  return amount;
}

Описание функции

Функция fixAmount должна принимать единственный аргумент:

  1. amount— количество штук в заказе, строка или число. Функция должна вернуть число, соответствующее пользовательскому вводу, если его оттуда можно извлечь. Либо -1. Должны обрабатываться все варианты из примера использования функции.

Пример использования функции

const orders = [
  { price: 21, amount: 4 },
  { price: 50, amount: '17 штук' },
  { price: 7, amount: '1,5 килограмма' },
  { price: 2, amount: ' 2.7 метра ' },
  { price: 1, amount: 'семь единиц' }
];

for (let order of orders) {
  let result = fixAmount(order.amount);
  console.log(`Заказ на сумму: ${result * order.price} Q`);
}

Если все сделать верно, то вы получите вот такой результат:

Заказ на сумму: 84 Q
Заказ на сумму: 850 Q
Заказ на сумму: 10.5 Q
Заказ на сумму: 5.4 Q
Заказ на сумму: -1 Q

Задача № 2. Секретный код.

Наш инвестор просит реализовать «тайный» уровень для своих друзей. Если пользователь на сайте наберет r2d2 с клавиатуры, то все цены на сайте станут с максимальной скидкой.

Для обработки событий клавиатуры будет использована функция handleKey, и если внутри функции станет ясно, что набран секретный код, то нужно вызвать функцию showSpecialPrice().

Описание функции

Функция handleKey должна принимать один аргумент:

  1. char — символ, набранный на клавиатуре, строка. Функция должна накапливать введенные символы. И если последние введенные символы будут соответствовать коду r2d2 в любом регистре, то функция должна вызвать функцию showSpecialPrice.

Пример использования

var keys = ['2', '4', 'R', '2', 'd', '2'];
for (let key of keys) {
  handleKey(key);
}

Если всё правильно сделать, то сообщение Введен секретный код. Все цены уменьшены вдвое! будет выведено один раз.

Задача №3. Импорт CSV файла

Наш отдел снабжения постоянно получает от поставщиков «из прошлого» таблички Excel в формате CSV с данными по остаткам, партиям и закупочным ценам. Конечно же, они все это обрабатывают вручную, и поэтому толком не успевают делать ничего другого.

Давайте напишем функцию parseData, которая будет делать из CSV-файла нормальный объект со свойствами.

Описание функции

Функция принимает следующие аргументы:

  1. Cписок имен ячеек, массив строк;
  2. Cписок строк файла, массив строк;
  3. Разделитель ячеек в строке, по умолчанию ,, строка.

Функция должна вернуть массив объектов, преобразовав список строк в список объектов, выполнив для каждой строки следующие действия:

  1. Каждую строку разбить на ячейки, используя разделитель из аргументов функции;
  2. Создать объект;
  3. Заполнить его свойствами, взяв имена свойств из списка имен ячеек, которые переданы в функцию, а значения взять из ячеек, полученных разбиением строки;
  4. Поместить объект в результирующий массив.

Пример использования

const data = [
  '12,Телепорт бытовой VZHIH-101 ,17,10000',
  '77, Меч световой FORCE (синий луч), 2,57000'
];

let items = parseData(['id', 'name', 'amount', 'price'], data);
console.log(items);

Если все сделать верно, то вы получите вот такой результат:

[ { id: '12',
    name: 'Телепорт бытовой VZHIH-101',
    amount: '17',
    price: '10000' },
  { id: '77',
    name: 'Меч световой FORCE (синий луч)',
    amount: '2',
    price: '57000' } ]

Инструкция по выполнению домашнего задания:

  1. Зарегистрируйтесь на сайте Repl.IT.
  2. Перейдите в раздел my repls.
  3. Нажмите кнопку Start coding now!, если приступаете впервые, или New Repl, если у вас уже есть работы.
  4. В списке языков выберите JavaScript.
  5. Код пишите в левой части окна.
  6. Посмотреть результат выполнения файла можно, нажав на кнопку Run. Результат появится в правой части окна.
  7. После окончания работы нажмите кнопку Share и скопируйте ссылку из поля Share link.
  8. В личном кабинете на сайте netology.ru в поле комментария к домашней работе вставьте скопированную ссылку и отправьте работу на проверку.

Никаких файлов прикреплять не нужно.