← Назад к вопросам

Зачем нужна коллекция Map?

1.0 Junior🔥 131 комментариев
#Soft Skills и рабочие процессы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Зачем нужна коллекция Map в JavaScript

Map — это встроенная коллекция в JavaScript, которая хранит пары ключ-значение. В отличие от обычного объекта, Map имеет существенные преимущества и специальные свойства для работы с данными.

Основные различия Map и Object

1. Тип ключей В Map ключом может быть любой тип данных: число, строка, объект, функция. В обычном объекте ключи преобразуются в строки:

// Object — ключи становятся строками
const obj = {};
obj[1] = "число";
obj[true] = "логическое";
console.log(Object.keys(obj)); // ["1", "true"]

// Map — ключи сохраняют тип
const map = new Map();
map.set(1, "число");
map.set(true, "логическое");
map.set({}, "объект");
console.log(map.size); // 3

2. Производительность поиска Map оптимизирована для частых операций добавления и поиска. Для больших наборов данных Map работает быстрее:

const map = new Map();
const obj = {};

// Добавление миллионов элементов
for (let i = 0; i < 1000000; i++) {
  map.set(i, i);
  obj[i] = i;
}

// Map.get быстрее, чем obj[key]
console.time("Map");
map.get(500000);
console.timeEnd("Map"); // ~0.1ms

console.time("Object");
obj[500000];
console.timeEnd("Object"); // ~0.2ms

3. Итерация Map запоминает порядок добавления элементов и предоставляет удобные методы для итерации:

const map = new Map([
  ["a", 1],
  ["b", 2],
  ["c", 3]
]);

// Итерация в порядке добавления
for (const [key, value] of map) {
  console.log(key, value);
}

// Получение только ключей или значений
map.keys();   // MapIterator [a, b, c]
map.values(); // MapIterator [1, 2, 3]

Практические примеры использования

1. Кэширование результатов (Memoization)

const cache = new Map();

function fibonacci(n) {
  if (cache.has(n)) {
    return cache.get(n);
  }
  
  let result;
  if (n <= 1) result = n;
  else result = fibonacci(n - 1) + fibonacci(n - 2);
  
  cache.set(n, result);
  return result;
}

2. Группирование данных

const users = [
  { id: 1, role: "admin" },
  { id: 2, role: "user" },
  { id: 3, role: "admin" }
];

const byRole = new Map();
users.forEach(user => {
  if (!byRole.has(user.role)) {
    byRole.set(user.role, []);
  }
  byRole.get(user.role).push(user);
});

3. Управление состоянием

const eventHandlers = new Map();

function subscribe(event, handler) {
  if (!eventHandlers.has(event)) {
    eventHandlers.set(event, []);
  }
  eventHandlers.get(event).push(handler);
}

function emit(event, data) {
  if (eventHandlers.has(event)) {
    eventHandlers.get(event).forEach(h => h(data));
  }
}

Методы и свойства Map

  • set(key, value) — добавить или обновить
  • get(key) — получить значение
  • has(key) — проверить наличие ключа
  • delete(key) — удалить элемент
  • clear() — очистить всю коллекцию
  • size — количество элементов

Когда использовать Map

  • Когда ключи не строки
  • Когда нужна частая итерация
  • Для кэширования и группирования
  • Когда нужна гарантия порядка элементов
  • Для управления состоянием и событиями

Map — это мощный инструмент для работы со сложными структурами данных в современном JavaScript.

Зачем нужна коллекция Map? | PrepBro