> Что такое Map и Set в JavaScript (JavaScript)

Уровень: junior · Роль: mobile · Категория: Технические вопросы

Компании: Юрент

Стек: JavaScript

> Пример ответа

Короткий ответ

Map и Set - это встроенные коллекции в JavaScript. Map хранит пары "ключ-значение", где ключом может быть любое значение (включая объекты и функции), а Set хранит уникальные значения любого типа. Обе структуры появились в ES6 и предоставляют методы для добавления, удаления и проверки наличия элементов. В отличие от обычных объектов, Map сохраняет порядок вставки и имеет удобный метод size для получения количества элементов.

Подробное объяснение

Map - это коллекция пар "ключ-значение". Основное отличие от обычного объекта:

  • ключом может быть любой тип данных (объект, функция, NaN, undefined)
  • порядок элементов сохраняется в порядке вставки
  • есть встроенное свойство size
  • методы get, set, has, delete, clear работают предсказуемо

Set - это коллекция уникальных значений. Полезен, когда нужно гарантировать отсутствие дубликатов. При добавлении значения, которое уже есть в Set, оно игнорируется. Порядок элементов также сохраняется.

Основные методы обеих структур:

  • add (для Set) и set (для Map) - добавление
  • has - проверка наличия
  • delete - удаление
  • clear - очистка
  • size - количество элементов

Обе структуры являются итерируемыми, поэтому их можно использовать с for...of, forEach, spread-оператором.

На практике

В мобильной разработке (например, React Native) Map и Set часто используются для:

  • хранения кэша данных с ключами-объектами
  • отслеживания уникальных идентификаторов элементов списков
  • реализации логики "выбрано/не выбрано" без дубликатов
  • хранения временных данных с быстрым доступом по ключу

Важно помнить, что Map и Set имеют сложность операций O(1) для добавления, удаления и поиска, что делает их эффективными для больших коллекций.

Пример кода

JAVASCRIPT
// Map
const userMap = new Map();
const userObj = { id: 1 };
userMap.set(userObj, 'Алексей');
userMap.set('name', 'Мария');
userMap.set(42, 'число');
console.log(userMap.get(userObj)); // 'Алексей'
console.log(userMap.has(42)); // true
console.log(userMap.size); // 3
userMap.forEach((value, key) => {
console.log(key, value);
});
// Set
const uniqueIds = new Set();
uniqueIds.add(1);
uniqueIds.add(2);
uniqueIds.add(1); // дубликат, будет проигнорирован
console.log(uniqueIds.size); // 2
console.log(uniqueIds.has(2)); // true
uniqueIds.delete(1);
console.log([...uniqueIds]); // [2]

Как отвечать на собеседовании

Начни с краткого определения, затем приведи пример использования. Покажи понимание отличий от обычных объектов и массивов. Упомяни, что Map удобен для хранения данных с ключами-объектами, а Set - для гарантии уникальности. Если спросят про производительность, скажи, что обе структуры дают O(1) для основных операций. Не углубляйся в сложные сценарии, если не просят.

Что проверяет интервьюер

Интервьюер проверяет:

  • знание базовых структур данных в JavaScript
  • понимание отличий Map от Object и Set от Array
  • умение применять эти структуры в реальных задачах
  • знание методов и итерации по коллекциям

Типичные ошибки

  • путать Map с Object и пытаться использовать map.key вместо map.get(key)
  • забывать, что Set хранит только уникальные значения
  • использовать length вместо size
  • не знать, что ключом Map может быть объект, а ключом Object - только строка или символ
  • забывать, что Map и Set итерируемы, и пытаться использовать Object.keys()

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью