JavaScript Map — словник із будь-якими ключами
Map (у перекладі — відображення, словник) зберігає пари ключ → значення, де ключем може бути що завгодно: рядок, число, об'єкт, навіть функція.
Загальний опис
Звичайний об'єкт теж схожий на словник, але має три вади, через які його весь час доводилось підпирати милицями.
Перше: ключі там тільки рядки. Спробуєш взяти ключем об'єкт — він мовчки перетвориться на "[object Object]", і два різні об'єкти зіллються в один ключ.
Друге: об'єкт успадковує властивості. Ключ на ім'я toString чи constructor уже «існує», хоч ти його не клав.
Третє: щоб дізнатись кількість, доводиться рахувати Object.keys(obj).length — окремим проходом.
Map не має жодної з цих проблем: ключі будь-які, нічого зайвого не успадковується, розмір — у властивості size, а порядок додавання зберігається чесно.
- Порада
-
Ключ-об'єкт — головна причина брати
автор: NagarDMap: так можна прив'язати дані до DOM-елемента, не чіпаючи сам елемент. - Нотатка
-
автор: NagarDMapне серіалізується вJSON.stringify()— на виході буде порожній{}. Щоб зберегти, перетвори:JSON.stringify([...map]).
Синтаксис
const map = new Map([[key, value], ...]);
методи
| Метод | Опис |
|---|---|
| get | Повертає значення за ключем або undefined. |
| set | Додає чи оновлює пару ключ–значення. |
| has | Перевіряє наявність ключа. |
| delete | Видаляє пару за ключем. |
| clear | Видаляє всі пари. |
| forEach | Виконує функцію для кожної пари. |
| keys | Ітератор ключів у порядку вставки. |
| values | Ітератор значень у порядку вставки. |
| entries | Ітератор пар [ключ, значення]. |
властивості
| Властивість | Опис |
|---|---|
| size | Кількість пар у колекції. |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| Map | 38+ | 13+ | 8+ | 25+ | 12+ | 11+ |
| Переглядач | ||||
|---|---|---|---|---|
| Map | 38+ | yes | yes | 8+ |
Приклади
+ запропонувати свій приклад у пісочниці
Ключами можуть бути об'єкти — зі звичайним об'єктом так не вийде.
const users = new Map();
users.set('id', 42);
users.set(1, 'число як ключ');
// ключ-об'єкт: дані прив'язані до елемента, сам елемент не змінюємо
const button = document.querySelector('button');
users.set(button, { clicks: 0 });
console.log(users.get(button)); // { clicks: 0 }
console.log(users.size); // 3
console.log(users.has('id')); // true
for (const [key, value] of users) {
console.log(key, '→', value);
}
Коментарі
Коментарів ще немає — будьте першим!