Map в JavaScript
Task в RS School по JavaScript про Map
Для работы со сложными структурами данных, такими как массивы и объкты, принято использовать Map и Set
Map — это коллекция, предназначенная для хранения данных любого типа в виде пар [ключ, значение].
Каждое значение сохраняется по уникальному ключу, который затем используется для доступа к этому значению. При этом ключи также могут быть любого типа.
Методы и свойства Map
new Map() › создаёт коллекцию
map.set(key, value) › записывает по ключу "key" значение "value"
map.get(key) › возвращает значение по ключу или "undefined", если ключ "key" отсутствует.
map.has(key) › озвращает "true", если ключ "key" присутствует в коллекции, иначе "false".
map.delete(key) › удаляет элемент (пару [ключ/значение]) по ключу "key"
map.clear() › очищает коллекцию от всех элементов.
map.size › возвращает текущее количество элементов.
Пример использования
let map = new Map();
map.set("1", "string1"); // строка в качестве ключа
map.set(1, "number1"); // цифра как ключ
map.set(true, "boolean1"); // булево значение как ключ
// помните, обычный объект Object приводит ключи к строкам?
// Map сохраняет тип ключей, так что в этом случае сохранится 2 разных значения:
console.log(map.get(1)); // "number1"
console.log(map.get("1")); // "string1"
console.log(map.size); // 3
Как мы видим, в отличие от объектов, ключи в "Map" не приводятся к строкам. Это позволяет использовать любые типы данных в качестве ключей.
Использование map[key] не является корректным способом работы с Map. Хотя map[key] может работать, например, мы можем установить map[key] = 2, в этом случае map будет рассматриваться как обычный JavaScript-объект, что приводит к всем соответствующим ограничениям (например, ключи будут приводиться к строкам и т.д.).
Поэтому для работы с Map следует использовать специальные методы, такие как set, get и другие.
Map может использовать объекты в качестве ключей.
let john = { name: "John" };
// давайте сохраним количество посещений для каждого пользователя
let visitsCountMap = new Map();
// объект john - это ключ для значения в объекте Map
visitsCountMap.set(john, 123);
console.log(visitsCountMap.get(john)); // 123
Использование объектов в качестве ключей — одна из наиболее заметных и важных функций Map. Это невозможно сделать с помощью обычных объектов. В объектах ключи могут быть только строками или символами, но мы не можем использовать другой объект в качестве ключа.
Пример использования объекта в качестве ключа
let john = { name: "John" };
let ben = { name: "Ben" };
let visitsCountObj = {}; // попробуем использовать объект
visitsCountObj[ben] = 234; // пробуем использовать объект ben в качестве ключа
visitsCountObj[john] = 123; // пробуем использовать объект john в качестве ключа, при этом объект ben будет замещён
// Вот что там было записано!
console.log( visitsCountObj["[object Object]"] ); // 123
Поскольку visitsCountObj является объектом, он преобразует все ключи типа Object, такие как john и ben, в одну и ту же строку "[object Object]". Это, очевидно, не то, чего мы хотим.