Опубликовано

Хэш-карты в JavaScript: высокопроизводительные пары ключ-значение

Авторы

Почему HashMap?

Мы все знаем, что в других языках программирования есть структура данных, называемая Hashtable. Она хранит пары ключ-значение, которые очень удобны благодаря поиску за O(1) (постоянное время). Это выгодная структура данных, которую можно использовать для хранения информации. В JavaScript у нас нет встроенной структуры данных, подобной Hashtable. Но мы можем использовать объект для хранения пар ключ-значение. В JavaScript это называется Map.

Что такое Map?

Map - это коллекция элементов, где каждый элемент хранится как пара Ключ, Значение. Ключи и значения Map могут быть любыми значениями (как объектами, так и примитивными значениями). Объект Map итерирует свои элементы в порядке вставки - цикл for...of возвращает массив [ключ, значение] для каждой итерации.

Map хранит пары ключ-значение, где ключи могут быть любого типа данных. Map имеет свойство, которое представляет размер Map. Map запоминает первоначальный порядок вставки ключей.

Методы и свойство Map

МетодОписание
new Map()Создает новый объект Map
set()Устанавливает значение для ключа в Map
get()Возвращает значение для ключа
has()Возвращает логическое значение, указывающее, существует ли ключ в Map
delete()Удаляет ключ из Map
clear()Удаляет все ключи из Map
values()Возвращает объект итератора значений в Map
keys()Возвращает объект итератора ключей в Map
entries()Возвращает объект итератора пар ключ-значение в Map
forEach()Выполняет предоставленную функцию один раз для каждой пары ключ-значение в Map
СвойствоОписание
sizeВозвращает количество пар ключ/значение в Map

Пример Map

const map = new Map()
map.set('name', 'John')
map.set('age', 30)
map.set('isMarried', true)
map.set('address', { city: 'New York', state: 'NY' })
map.set('hobbies', ['reading', 'writing', 'coding'])

console.log(map.get('name')) // John
console.log(map.get('age')) // 30
console.log(map.get('isMarried')) // true
console.log(map.get('address')) // {city: 'New York', state: 'NY'}
console.log(map.get('hobbies')) // ['reading', 'writing', 'coding']

console.log(map.size) // 5

Итерация Map

const map = new Map()
map.set('name', 'John')
map.set('age', 30)
map.set('isMarried', true)
map.set('address', { city: 'New York', state: 'NY' })
map.set('hobbies', ['reading', 'writing', 'coding'])

// Итерация ключей
for (const key of map.keys()) {
  console.log(key)
}

// Итерация значений
for (const value of map.values()) {
  console.log(value)
}

// Итерация пар ключ-значение
for (const [key, value] of map.entries()) {
  console.log(key, value)
}

// Итерация пар ключ-значение
map.forEach((value, key) => {
  console.log(key, value)
})

Map vs. Object

MapObject
Map - это коллекция элементов с ключами, как и объект. Но основное отличие в том, что Map позволяет использовать ключи любого типа.Ключи объекта должны быть либо строкой, либо символом.
Map итерируема и может быть легко пройдена в цикле.Объект не итерируемый и его нельзя легко пройти в цикле.
Map имеет встроенный метод forEach, поэтому нет необходимости преобразовывать его в массив.Объект не имеет встроенного метода forEach.
Map имеет свойство size, поэтому мы можем легко получить количество элементов.Объект не имеет свойства size.
Map может использовать объекты в качестве ключей.Объект не может использовать объекты в качестве ключей.
Map в целом быстрее, чем Object.Объект, как правило, медленнее, чем Map.

Заключение

В этой статье мы узнали о Map в JavaScript. Мы узнали о методах и свойствах Map. Мы также узнали о различиях между Map и Object. Надеюсь, вам понравилась эта статья. Если у вас есть какие-либо вопросы, оставьте комментарий ниже. Спасибо за прочтение.

Оригинал статьи: https://blog.imam.dev/blog/javascript-hashmap

Ссылки

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

https://www.freecodecamp.org/news/what-is-a-javascript-map-what-are-the-differences-between-map-and-object-in-javascript/

https://www.geeksforgeeks.org/map-vs-object-javascript/