# Неделя #2 Объекты и массивы. Обработка ошибок


# Подготовка к выполнению задания

Изучить все материалы второй недели курса в Личном кабинете.

# Что нужно сделать?

# Выполнить домашнее задание #2 (Работа с массивами и объектами)

  1. Склонируйте форкнутый репозиторий
  2. Переключитесь на ветку с домашним заданием git checkout 2-objects-and-arrays
  3. Приступаем к выполнению ДЗ №2
  4. Повторите действия начиная с пункта 4 алгоритма работы с ДЗ

Задание 2.1:

  • Напишите аналог встроенного метода forEach для работы с массивами
  • Посмотрите как работает forEach и повторите это поведение для массива, который будет передан в параметре array

Пример:


   forEach([1, 2, 3], (el) => console.log(el))

Задание 2.2:

  • Напишите аналог встроенного метода map для работы с массивами
  • Посмотрите как работает map и повторите это поведение для массива, который будет передан в параметре array

Пример:

map([1, 2, 3], (el) => el ** 2) // [1, 4, 9]

Задание 2.3:

  • Напишите аналог встроенного метода reduce для работы с массивами
  • Посмотрите как работает reduce и повторите это поведение для массива, который будет передан в параметре array

Пример:

   reduce([1, 2, 3], (all, current) => all + current) // 6
   

Задание 2.4:

  • Функция должна перебрать все свойства объекта, преобразовать их имена в верхний регистр и вернуть в виде массива

Пример:

  upperProps({ name: 'Сергей', lastName: 'Петров' }) вернет ['NAME', 'LASTNAME']

Задание 2.5:*

  • Функция принимает объект и должна вернуть Proxy для этого объекта
  • Proxy должен перехватывать все попытки записи значений свойств и возводить это значение в квадрат

Пример:

   const obj = createProxy({});
   obj.foo = 2;
   console.log(obj.foo); // 4

  1. Для того, чтобы протестировать сделанную работу - запускаем тесты с помощью команды npm run test. Все доступные команды указаны в описании к сборке на GitHub и package.json

  2. После выполнения создаем Pull Request в Github. Ссылку отправляем наставнику на проверку.

# Выполнить домашнее задание #3 (Работа с исключениями и отладчиком)

  1. Склонируйте форкнутый репозиторий
  2. Переключитесь на ветку с домашним заданием git checkout 3-exceptions
  3. Приступаем к выполнению ДЗ №3.
  4. Повторите действия начиная с пункта 4 алгоритма работы с ДЗ

Задание 3.1:

3.1.1:

  • Функция принимает массив и фильтрующую функцию и должна вернуть true или false
  • Функция должна вернуть true только если fn вернула true для всех элементов массива

3.1.2: Необходимо выбрасывать исключение в случаях:

  • array не массив или пустой массив (с текстом "empty array")
  • fn не является функцией (с текстом "fn is not a function")

Запрещено использовать встроенные методы для работы с массивами

Пример:

   isAllTrue([1, 2, 3, 4, 5], n => n < 10) // вернет true
   isAllTrue([100, 2, 3, 4, 5], n => n < 10) // вернет false  

Задание 3.2:

3.2.1:

  • Функция принимает массив и фильтрующую функцию и должна вернуть true или false
  • Функция должна вернуть true если fn вернула true хотя бы для одного из элементов массива

3.2.2: Необходимо выбрасывать исключение в случаях:

  • array не массив или пустой массив (с текстом "empty array")
  • fn не является функцией (с текстом "fn is not a function")

Запрещено использовать встроенные методы для работы с массивами

Пример:

isSomeTrue([1, 2, 30, 4, 5], n => n > 20) // вернет true
isSomeTrue([1, 2, 3, 4, 5], n => n > 20) // вернет false

Задание 3.3:

3.3.1:

  • Функция принимает заранее неизвестное количество аргументов, первым из которых является функция fn
  • Функция должна поочередно запустить fn для каждого переданного аргумента (кроме самой fn)

3.3.2: Функция должна вернуть массив аргументов, для которых fn выбросила исключение

3.3.3: Необходимо выбрасывать исключение в случаях:

  • fn не является функцией (с текстом "fn is not a function")

Задание 3.4:

3.4.1: Функция имеет параметр number (по умолчанию - 0)

3.4.2: Функция должна вернуть объект, у которого должно быть несколько методов:

  • sum - складывает number с переданными аргументами
  • dif - вычитает из number переданные аргументы
  • div - делит number на первый аргумент. Результат делится на следующий аргумент (если передан) и так далее
  • mul - умножает number на первый аргумент. Результат умножается на следующий аргумент (если передан) и так далее

Количество передаваемых в методы аргументов заранее неизвестно

3.4.3: Необходимо выбрасывать исключение в случаях:

  • number не является числом (с текстом "number is not a number")
  • какой-либо из аргументов div является нулем (с текстом "division by 0")
  1. Для того, чтобы протестировать сделанную работу - запускаем тесты с помощью команды npm run test. Все доступные команды указаны в описании к сборке на GitHub и package.json

  2. После выполнения создаем Pull Request в Github. Ссылку отправляем наставнику на проверку.

Дедлайн: понедельник следующей недели, в 12.00.

Обратите внимание!

  • Pull request обязательно делаем из ветки с текущим ДЗ в ветку мастер. В ветке мастер всегда должна лежать только сборка.

  • Всегда создаем новую ветку для нового ДЗ, предварительно переключившись на ветку мастер. В новой, созданной вами ветке не должно быть прошлых ДЗ.

# Как всё успеть?

Данный план является примерным ориентиром. Вы всегда можете работать в удобном для себя темпе.

# 🗓 Понедельник

Изучаем материалы по теме "Объекты и массивы"

Выполняем домашнее задание 2

# 🗓 Вторник

Продолжаем изучать материалы по теме "Объекты и массивы"

Сдаём домашнее задание 2 на проверку.

Вносим правки в домашнее задание №2 после проверки его наставником.

# 🗓 Среда

Изучаем материалы по теме "Обработка ошибок и отладка"

Изучаем материалы из прикрепленных ссылок

Выполняем домашнее задание 3

# 🗓 Четверг

Сдаём домашнее задание 3 на проверку.

# 🗓 Пятница

Подготовьте вопросы и запишитесь на консультацию к наставнику (тариф "Уютный").

# 🗓 Выходные

Смотрим воркшоп с разбором заданий по второй неделе.

Вносим правки в домашнее задание №3 после проверки его наставником.