Map — это специальный объект для хранения пар ключ-значение, как и обычный объект. Но у Map есть важные отличия: ключами могут быть любые значения (включая объекты), есть методы для работы с данными и всегда можно узнать размер. Обычный объект проще, но Map мощнее для сложных задач.
Map — это тип объекта в JavaScript, который хранит данные в виде пар ключ-значение. На первый взгляд он похож на обычный объект, но имеет важные отличия, которые делают его удобнее в некоторых случаях.
// В обычном объекте ключи только строки или символы
const obj = {};
obj[1] = 'число'; // 1 станет строкой '1'
obj[true] = 'булево'; // true станет строкой 'true'
// В Map ключи могут быть любыми значениями
const map = new Map();
map.set(1, 'число'); // Число 1 как ключ
map.set(true, 'булево'); // Булево true как ключ
map.set({}, 'объект'); // Объект как ключ// У обычного объекта нет простого способа узнать размер
const obj = { a: 1, b: 2 };
// Нет встроенного способа узнать, что у объекта 2 свойства
// У Map есть свойство size
const map = new Map([['a', 1], ['b', 2]]);
console.log(map.size); // 2const map = new Map();
// Удобные методы для работы
map.set('ключ', 'значение'); // Добавить
map.get('ключ'); // Получить
map.has('ключ'); // Проверить наличие
map.delete('ключ'); // Удалить
map.clear(); // Очистить всёconst user1 = { id: 1, name: 'Иван' };
const user2 = { id: 2, name: 'Петр' };
const userRoles = new Map();
userRoles.set(user1, 'админ');
userRoles.set(user2, 'пользователь');
// Каждый пользователь хранит свою роль
console.log(userRoles.get(user1)); // 'админ'// Подсчет, сколько раз встречается каждый элемент
const map = new Map();
const items = ['яблоко', 'банан', 'яблоко', 'апельсин', 'банан'];
items.forEach(item => {
map.set(item, (map.get(item) || 0) + 1);
});
console.log(map); // Map(3) { 'яблоко' => 2, 'банан' => 2, 'апельсин' => 1 }const map = new Map();
map.set('второй', 2);
map.set('первый', 1);
map.set('третий', 3);
// Порядок сохраняется как при добавлении
for (let [key, value] of map) {
console.log(key, value);
}
// Выведет в порядке добавления// Обычный объект имеет унаследованные методы
const obj = {};
console.log(obj.toString); // function toString()
// Map не имеет унаследованных методов
const map = new Map();
console.log(map.toString); // undefined// ❌ Использование Map для простых случаев
const settings = new Map();
settings.set('theme', 'dark');
settings.set('lang', 'ru');
// ✅ Обычный объект проще и лучше
const settings = {
theme: 'dark',
lang: 'ru'
};// ❌ Попытка использовать точечную нотацию
const map = new Map();
map.key = 'значение'; // Не сработает как ожидается
// ✅ Использование методов Map
map.set('key', 'значение'); // Правильный способMap — мощный инструмент, который решает ограничения обычных объектов. Но для простых задач обычный объект может быть проще и достаточным.
Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪