01. Map
Map
— коллекция для хранения записей вида ключ:значение
. Предпочтительнее использовать вместо объектов, когда нужна структура вида ключ-значение.
Отличия карт от объектов:
В объектах в которых ключами могут быть только строки, в
Map
ключом может быть произвольное значение, в том числе объект или функция.Объект имеет прототипы, что влияет на его ключи. Карты с этой точки зрения выступают как "чистые объекты".
Можно легко получить размер карты, размер объектов много сложнее.
Карта сохраняет пары ключ-значение в порядке их добавления.
Перебор гарантированно осуществляется в порядке вставки.
На картах реализованы символы
Symbol.iterator
Symbol.toStringTag
Symbol.species
Create Map
При создании Map
можно сразу инициализировать списком значений. Аргументом new Map
должен быть итерируемый объект (не обязательно именно массив):
Object.entries()
also lets you set up a Map via an object. This is more concise than using an Array of 2-element Arrays, but keys can only be strings:
Map
API
Map
APIДля сохранения и чтения значений используются методы get
и set
. И ключи и значения сохраняются «как есть», без преобразований типов.
Другие методы:
size
- число записей вMap
.clear()
- удаляет все записи из карты.delete()
- удаляет запись с ключомkey
, возвращаетtrue
, если такая запись была, иначеfalse
.has()
- возвращаетtrue
, если ключ есть, иначеfalse
.get()
- возвращает значение по ключу илиundefined
set()
- ассоциирует значение с ключом и возвращает текущую карту.
Для проверки значений на эквивалентность используется алгоритм SameValueZero
. Он аналогичен строгому равенству ===
, отличие — в том, что NaN
считается равным NaN
. Поэтому значение NaN
также может быть использовано в качестве ключа.
Map
iteration
Map
iterationДля итерации по map
используется один из трёх методов:
map.keys()
— возвращает итерируемый объект для ключей,map.values()
— возвращает итерируемый объект для значений,map.entries()
— возвращает итерируемый объект для записей[ключ, значение]
, он используется по умолчанию вfor..of
.for..of
- аналогичен вызовуmap.entries()
[...map]
- аналогичен вызову методаmap.entries()
.Карты имеют метод
forEach
, но не имеют методовmap
иfilter
.
Notice that map.values()
and map.entries()
return iterator objects. To put the result into an array, the spread operator ...
is necessary. In a for..of
loop statement the iterator can be used directly.
Карты можно комбинировать используя spread
операторы в конструкторе:
К карты не имеют функции map
, но её можно соответствующим образом эмулировать:
Аналогичным образом можно эмулировать функцию filter
.
Conversions
Конверсия карты в JSON и обратно:
Конверсия карт в объекты возможна только если все ключи карты являются строками:
Last updated
Was this helpful?