Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про 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, когда вам нужно хранить коллекцию уникальных значений.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

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

#data

#structure

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию