Skip to main content

Що таке Map?

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

Головна ідея:

Map - це як об'єкт {}, але:

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

Створення Map:

javascript
const map = new Map(); map.set("name", "Alice"); map.set("age", 25); map.set({ id: 1 }, "User Object"); console.log(map); // Map(3) { 'name' => 'Alice', 'age' => 25, { id: 1 } => 'User Object' }

Методи Map

МетодОписПриклад
set(key, value)додати або оновити паруmap.set("x", 10)
get(key)отримати значенняmap.get("x") // 10
has(key)перевірити наявність ключаmap.has("x") // true
delete(key)видалити елементmap.delete("x")
clear()очистити всю колекціюmap.clear()
sizeкількість елементівmap.size // 3

Приклад роботи:

javascript
const userData = new Map(); userData.set("name", "Tim"); userData.set("role", "Admin"); console.log(userData.get("name")); // Tim console.log(userData.has("role")); // true console.log(userData.size); // 2

Ключі можуть бути будь-якими!

javascript
const map = new Map(); const objKey = { id: 1 }; const funcKey = function () {}; const numKey = 123; map.set(objKey, "Object as key"); map.set(funcKey, "Function as key"); map.set(numKey, "Number as key"); console.log(map.get(objKey)); // "Object as key" console.log(map.get(funcKey)); // "Function as key"

У звичайних об'єктах ({}) ключі завжди перетворюються на рядки. У Map вони зберігають свій тип.

Перебір Map

Map - ітерована структура, можна використовувати різні цикли.

for...of

javascript
for (const [key, value] of map) { console.log(key, value); }

forEach

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

Отримання всіх ключів, значень і пар:

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

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

ВластивістьObjectMap
Тип ключівлише рядки та символибудь-які значення
Порядок ключівне гарантується повністюзберігається порядок вставки
Розмір (length)потрібно рахувати вручнувластивість .size
Ітерованістьпотрібні Object.keys() тощоітерується напряму
Продуктивністьгірша при частих вставках/видаленняхшвидша при великій кількості операцій
Прототипє (Object.prototype)немає - "чиста" колекція

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

Кешування даних:

javascript
const cache = new Map(); function getUser(id) { if (cache.has(id)) { return cache.get(id); // повернути з кешу } const user = { id, name: "User" + id }; // припустимо, запит cache.set(id, user); return user; }

Зв'язок між об'єктами:

javascript
const userRoles = new Map(); const alice = { name: "Alice" }; const bob = { name: "Bob" }; userRoles.set(alice, "admin"); userRoles.set(bob, "editor"); console.log(userRoles.get(alice)); // "admin"

Тут Map дозволяє "прив'язати" дані до об'єктів - що в звичайних об'єктах {} неможливо.

Коротко:

ВластивістьОпис
Зберігає пари"ключ -> значення"
Тип ключівбудь-який
Порядокзберігається
Можна перебиратиТак
Унікальність ключівТак
Методиset, get, has, delete, clear
Розмір.size

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

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

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