Диспетчеризация по ключу ассоциативного массива мощнее, чем кажется на первый взгляд. Далеко не всегда достаточно выбирать разные данные, иногда приходится выполнять другой код.
Предположим, что нам надо сформировать массив с фамилиями наших пользователей. Главное условие – для девушек берется девичья фамилия.
Реализуем эту задачу, используя старый добрый if
:
const lastNames = users.map((user) => {
if (user.gender === 'female') {
return user.maidenName;
}
return user.lastName;
});
Теперь решим эту задачу с помощью диспетчеризации по ключам объекта, но в отличие от предыдущего урока, в значениях у нас будут функции:
// Определяем key-value, где ключ — это пол, а значение — это функция,
// которая возвращает нужное значение для пола
const mapping = {
female: (user) => user.maidenName,
male: (user) => user.lastName,
};
// Выбираем нужную функцию по названию пола и вызываем ее
// Внутрь функции передается пользователь
const lastNames = users.map((user) => mapping[user.gender](user));
В некоторых ситуациях такой вариант решения задачи лучше. В нем явно прослеживаются зависимости, особенно если их становится много. Кроме того, конфигурация данными позволяет вынести их в другое место и расширять поведение без переписывания кода, который использует эти данные.
Еще один пример – парсинг данных в зависимости от их типа:
import yaml from 'js-yaml';
const mapping = {
yml: yaml.load,
json: JSON.parse,
};
const parse = (type, data) => mapping[type](data);
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.