Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: data, structure

Отличие map, set и object

Этот вопрос проверяет знание современных структур данных в JavaScript и их отличий от классических объектов для выбора подходящего инструмента под задачу.

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

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

Длинный ответ

Каждая структура данных предназначена для своих задач.

Object (Объект)

  • Ключи: Только строки или символы. Числа автоматически преобразуются в строки.

  • Порядок элементов: В современных JS порядок перечисления для строковых ключей соответствует порядку добавления (с некоторыми нюансами для целочисленных ключей), но исторически не гарантировался.

  • Итерация: Не является итерируемой по умолчанию. Для обхода нужно использовать Object.keys(), Object.values(), Object.entries().

  • Размер: Нет встроенного свойства для размера. Нужно вычислять через Object.keys(obj).length.

  • Использование: Идеально для представления структур, у которых ключи известны заранее (например, конфигурация, данные пользователя с фиксированными полями).

Map

  • Ключи: Могут быть любого типа: объекты, функции, примитивы.

  • Порядок элементов: Гарантированно сохраняет порядок вставки элементов.

  • Итерация: Является итерируемой. Можно перебирать напрямую с помощью for...of или forEach.

  • Размер: Есть встроенное свойство size.

  • Производительность: Лучше подходит для частого добавления и удаления пар ключ-значение.

  • Использование: Отлично подходит для случаев, когда ключ неизвестен до времени выполнения, или когда ключом должен быть объект (например, для хранения метаданных DOM-элементов).

const map = new Map();
const keyObj = { id: 1 };

map.set(keyObj, 'value associated with object');
map.set(42, 'answer to everything');

console.log(map.get(keyObj)); // 'value associated with object'
console.log(map.size); // 2

Set

  • Значения: Коллекция уникальных значений любого типа.

  • Порядок элементов: Гарантированно сохраняет порядок вставки элементов.

  • Итерация: Является итерируемой.

  • Размер: Есть встроенное свойство size.

  • Использование: Идеально для создания списков без дубликатов и для быстрой проверки наличия элемента.

const set = new Set([1, 2, 3, 3, 4, 4]); // Дубликаты игнорируются
set.add(5);
console.log(set.has(3)); // true
console.log(set.size); // 4 (значения: 1, 2, 3, 4, 5)

Вывод

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#data

#structure

Подпишись на React Developer в телеграм