Зачем нужна коллекция Map?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Зачем нужна коллекция 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.