PassFront
  1. PassFront
  2. База знаний
  3. Массивы и структуры данных

Чем Map отличается от обычного объекта, а Set от массива?

Массивы и структуры данных

Map — коллекция пар «ключ — значение» с любыми типами ключей и сохранением порядка вставки, а Set — коллекция уникальных значений. Обычный объект и массив решают похожие задачи, но имеют ограничения.

Map и объект

  • Тип ключа — Map: любой (объект, функция, число); Object: строка или Symbol
  • Размер — Map: map.size; Object: Object.keys(obj).length
  • Порядок — Map: порядок вставки; Object: порядок зависит от типа ключа
  • Прототип — Map: нет лишних ключей; Object: есть унаследованные ключи
  • Производительность — Map: оптимизирован под частые добавления/удаления; Object: быстрее для небольших статических структур
const map = new Map();
const key = { id: 1 };
map.set(key, 'value');
map.get(key); // 'value'

Ключ объекта-литерала всегда превращается в строку: obj[{}] и obj['[object Object]'] — один и тот же ключ.

Set и массив

const unique = new Set([1, 2, 2, 3]); // {1, 2, 3}
unique.has(2); // быстрая проверка наличия
[...unique];   // обратно в массив
  • Set хранит только уникальные значения.
  • Проверка has и удаление выполняются за O(1) в среднем, а includes и indexOf в массиве — за O(n).
  • У Set нет индексов и методов map/filter: для них его преобразуют в массив.

Когда что выбирать

  • Счётчики, кеши, словарь с нестроковыми ключами — Map.
  • Дедупликация и быстрая проверка принадлежности — Set.
  • Данные с известной формой и сериализацией в JSON — объект и массив.

Коротко для собеседования

Map допускает любые ключи, помнит порядок и имеет size, Set хранит уникальные значения с быстрым has. Объект и массив проще и сериализуются в JSON, но ключи объекта — только строки и Symbol.

Другие вопросы раздела