> Что такое Map и Set в JavaScript (JavaScript)
Уровень: junior · Роль: frontend · Категория: Технические вопросы
Компании: Kvando Technologies, Soft_Media_Group, Kodix, IT-One, Библио-Глобус, Molecula, EPAM, Evercode, ООО Снэп АйТи
Стек: JavaScript
> Пример ответа
Короткий ответ
Map и Set - это встроенные коллекции в JavaScript. Map хранит пары "ключ-значение", где ключом может быть любой тип данных, включая объекты и функции. Set хранит только уникальные значения любого типа. Оба предоставляют методы для добавления, удаления и проверки наличия элементов, а также поддерживают итерацию в порядке вставки.
Подробное объяснение
Map - это коллекция, аналогичная обычному объекту, но с важными отличиями:
- ключи могут быть любого типа (объект, число, строка,
NaN,undefined), а не только строки или символы - сохраняется порядок вставки элементов
- имеет свойство
size, а не методObject.keys().length - легко перебирается через
for...ofилиforEach - не имеет прототипа, поэтому нет риска конфликтов с унаследованными свойствами
Основные методы Map: set(key, value), get(key), has(key), delete(key), clear(). Также есть keys(), values(), entries() для итерации.
Set - это коллекция уникальных значений. При добавлении дубликата значение игнорируется. Основные методы: add(value), has(value), delete(value), clear(). Для проверки количества элементов используется size.
Обе структуры появились в ES6 и широко используются в современном JavaScript-коде.
На практике
Map удобен, когда нужны сложные ключи или частая операция проверки наличия ключа. Например, для кэширования результатов функций по объекту-аргументу.
Set полезен для удаления дубликатов из массива: [...new Set(arr)]. Также часто используется для хранения набора активных элементов, например, выбранных чекбоксов или подписчиков.
Обе коллекции хорошо работают с for...of и поддерживают деструктуризацию при итерации Map: for (const [key, value] of map).
Пример кода
JAVASCRIPT// Mapconst userRoles = new Map();const user = { id: 1 };userRoles.set(user, 'admin');userRoles.set('guest', 'viewer');console.log(userRoles.get(user)); // 'admin'console.log(userRoles.has('guest')); // trueconsole.log(userRoles.size); // 2// Setconst numbers = new Set([1, 2, 2, 3, 3, 3]);console.log(numbers.size); // 3numbers.add(4);numbers.delete(2);console.log(numbers.has(4)); // true// Удаление дубликатов из массиваconst arr = [1, 2, 2, 3];const unique = [...new Set(arr)]; // [1, 2, 3]
Как отвечать на собеседовании
Начни с краткого определения, затем перечисли ключевые отличия от объектов и массивов. Приведи пример использования для каждой структуры. Если спросят про производительность, упомяни, что операции has, add, delete в Set и get, set, has в Map работают за O(1) в среднем. Не углубляйся в детали реализации, если не просят.
Что проверяет интервьюер
Интервьюер проверяет:
- понимание разницы между Map и обычным объектом
- знание основных методов и свойств
- умение выбрать подходящую структуру для задачи
- понимание итерации и порядка элементов
- знание типичных сценариев использования (уникальность, сложные ключи)
Типичные ошибки
- путать Map с объектом и пытаться использовать
map.keyвместоmap.get(key) - забывать, что в Set нельзя получить элемент по индексу
- использовать
lengthвместоsize - не знать, что в Map ключ
NaNработает корректно, а сравнение ключей происходит по алгоритму SameValueZero - пытаться использовать
JSON.stringifyна Map или Set - они сериализуются в пустые объекты
> Похожие задачи по frontend
Какие есть способы объявления функций в JavaScript и их особенности
Что такое область видимости (scope) в JavaScript
Что такое this в JavaScript и как он работает в объектах и функциях?
Сколько типов данных в JavaScript и какие они
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью