Коротка відповідь
juniorMap — це колекція пар ключ‑значення, де ключі можуть бути будь‑якого типу. Set — це колекція унікальних значень без ключів. Обидві структури підтримують швидкий доступ O(1) і зберігають порядок вставки.
Повне пояснення
Що це і навіщо
- Map: колекція, що зберігає пари ключ‑значення. Ключі можуть бути будь‑якого типу (об’єкти, функції, примітиви). Підтримує швидкий доступ O(1) і зберігає порядок вставки, що корисно для асоціативних даних.
- Set: колекція унікальних значень без ключів. Підтримує O(1) пошук і вставку, зберігає порядок додавання.
Ключові принципи/терміни
has(key)– перевірка наявності ключа/значення.get(key),set(key, value)– доступ і оновлення у Map.add(value),delete(value)– маніпуляції в Set.- Ітерація:
for…of,entries(),keys(),values().
Як це працює
- Обидві структури реалізовані як хеш‑таблиці. Ключ/значення перетворюються в внутрішній хеш, що забезпечує швидкий доступ.
- Порядок вставки зберігається через внутрішню ланцюжкову структуру (LinkedList) або масив.
Практика і реалізація
const map = new Map();
map.set('a', 1);
console.log(map.get('a')); // 1
const set = new Set([1,2,3]);
set.add(4);
console.log(set.has(3)); // true
Тестування
- Jest:
test('Map preserves insertion order', () => {
const m = new Map([['b',2], ['a',1]]);
expect([...m.keys()]).toEqual(['b','a']);
});
Оптимізація, типові помилки та edge cases
- Не використовувати об’єкти як ключі без явного
toString, бо вони будуть різними навіть при однакових полях. - У Set не можна зберігати
NaNдвічі:new Set([NaN, NaN])→ лише один елемент. - При великій кількості елементів пам’ять може збільшуватися, тому слід розуміти ліміт.
Часті помилки
- Використання
map[key]замістьmap.get(key)– не працює. - Очікування, що Set зберігає індекси – не так.
- Перевірка
map.sizeзамістьObject.keys(obj).lengthдля об’єктів. - Додавання
undefinedу Set, що може бути непередбачуваним. - Неочікуваний результат при порівнянні об’єктів як ключів.
- Відсутність
deleteу Map → елемент залишається. - Перевантаження пам’яті при зберіганні великих об’єктів у Map.
- Неочікуваний
for…inна Map/Set – ітерує лише властивості об’єкта.
Cheatsheet
new Map()/new Set()– створення..set(key, value)/.add(value)– додавання..get(key),.has(key/val)– доступ..delete(key/val)– видалення..clear()– очищення..size– кількість елементів.