Skip to main content

Що таке Map?

Що таке Map

Map - це вбудований об'єкт у JavaScript, який зберігає пари "ключ → значення" і запам'ятовує порядок вставки цих пар.

Він схожий на звичайний об'єкт {}, але з розширеними можливостями:

  • може використовувати будь-який тип даних як ключ (зокрема об'єкти, функції, NaN);
  • має зручні методи для додавання, видалення та перебору;
  • зберігає порядок вставки елементів.

Приклад використання

javascript
const map = new Map(); map.set('name', 'Alex'); map.set('age', 25); console.log(map.get('name')); // Alex console.log(map.get('age')); // 25 console.log(map.size); // 2

Основні методи та властивості Map

Метод / властивістьЩо робитьПриклад
set(key, value)Додає елементmap.set('a', 1)
get(key)Повертає значення за ключемmap.get('a')
has(key)Перевіряє наявність ключаmap.has('a') // true
delete(key)Видаляє елементmap.delete('a')
clear()Очищає всю колекціюmap.clear()
sizeКількість елементівmap.size // 2

Приклад: різні типи ключів

javascript
const map = new Map(); const objKey = { id: 1 }; const funcKey = () => {}; const numKey = 42; map.set(objKey, 'об\'єкт'); map.set(funcKey, 'функція'); map.set(numKey, 'число'); console.log(map.get(objKey)); // об'єкт console.log(map.get(funcKey)); // функція console.log(map.get(42)); // число

На відміну від звичайного об'єкта {}, ключі тут порівнюються за посиланням, а не за приведеною до рядка формою.

Приклад з NaN та об'єктами

javascript
const map = new Map(); map.set(NaN, 'Not a Number'); console.log(map.get(NaN)); // 'Not a Number'

Навіть NaN працює як ключ (у звичайних об'єктах це неможливо).

Перебір Map

Map - колекція, що ітерується, тому її можна обійти будь-якими способами:

1. for...of

javascript
const map = new Map([ ['name', 'Alex'], ['age', 25], ]); for (const [key, value] of map) { console.log(`${key}: ${value}`); } // name: Alex // age: 25

2. Методи ітерації:

javascript
map.forEach((value, key) => { console.log(key, value); });

3. Отримати ключі / значення / записи:

javascript
console.log([...map.keys()]); // ['name', 'age'] console.log([...map.values()]); // ['Alex', 25] console.log([...map.entries()]); // [['name','Alex'], ['age',25]]

Порівняння з об'єктом {}

ОсобливістьObjectMap
Тип ключівТільки рядок або символБудь-який тип (включно з об'єктами й функціями)
Порядок елементівНе гарантований (до ES2015)Гарантований
Кількість елементівПотрібно рахувати вручну (Object.keys().length)map.size
Видаленняdelete obj.key (повільно)map.delete(key) (швидко)
Перебірfor...in (з успадкованими властивостями)Чистий for...of
ПродуктивністьКраще для невеликих наборів данихКраще для частих вставок/видалень

Перетворення між Map та об'єктом

З об'єкта → в Map:

javascript
const obj = { a: 1, b: 2 }; const map = new Map(Object.entries(obj));

З Map → в об'єкт:

javascript
const obj2 = Object.fromEntries(map);

Приклад практичного використання

Лічильник елементів, що зустрічаються:

javascript
const arr = ['a', 'b', 'a', 'c', 'b', 'a']; const counter = new Map(); for (const item of arr) { counter.set(item, (counter.get(item) || 0) + 1); } console.log(counter); // Map(3) { 'a' => 3, 'b' => 2, 'c' => 1 }

Коли використовувати Map

Використовуй Map, якщо:

  • потрібно зберігати не лише рядки як ключі;
  • важливо зберігати порядок вставки;
  • потрібне часте додавання й видалення елементів;
  • ти працюєш з асоціативними структурами даних.

Коротке резюме

ЩоОпис
ТипКолекція "ключ-значення"
КлючіБудь-які типи (включно з об'єктами)
ПорядокЗберігається
Методи.set(), .get(), .has(), .delete(), .clear()
Розмірmap.size
Перебірfor...of, .forEach(), .keys(), .values(), .entries()

Простіше кажучи:

Map - це покращена версія об'єкта {} з нормальними методами, підтримкою будь-яких ключів і гарантованим порядком елементів.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.