Рубрики
Без рубрики

Структура данных Карты JavaScript

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

  • Что такое карта
  • До ES6
  • Введите карту
    • Добавление элементов на карту
    • Получить предмет с карты по ключу
    • Удаление элемента с карты по ключу
    • Удалить все объекты с карты
    • Проверьте, содержит ли карта элемент по ключу
    • Найдите количество предметов на карте
  • Инициализировать карту значениями
  • Ключи к карте
  • Странные ситуации, которые вы почти никогда не встретите в реальной жизни
  • Перебор по карте
    • Перебор ключей карты
    • Перебор значений карты
    • Перебор пар ключ-значение карты
  • Преобразовать в массив
    • Преобразуйте ключи карты в массив
    • Преобразуйте значения карты в массив
  • Слабая карта

Что такое карта

Структура данных карты позволяет связать данные с ключом.

До ES6

ECMAScript 6 (также называемый ES 2015) представил структуру данных карты в мире JavaScript, наряду с набором

До его введения люди обычно использовали объекты в качестве карт, связывая некоторый объект или значение с определенным ключевым значением:

const car = {}
car['color'] = 'red'
car.owner = 'Flavio'
console.log(car['color']) //red
console.log(car.color) //red
console.log(car.owner) //Flavio
console.log(car['owner']) //Flavio

Введите карту

ES6 представила структуру данных карты, предоставив нам подходящий инструмент для обработки такого рода организации данных.

Карта инициализируется вызовом:

const m = new Map()

Добавление элементов на карту

Вы можете добавлять элементы на карту с помощью метода установить :

m.set('color', 'red')
m.set('age', 2)

Получить предмет с карты по ключу

И вы можете получить предметы с карты, используя получить :

const color = m.get('color')
const age = m.get('age')

Удаление элемента с карты по ключу

Используйте метод delete() :

m.delete('color')

Удалить все объекты с карты

Используйте метод очистить() :

m.clear()

Проверьте, содержит ли карта элемент по ключу

Используйте метод has() :

const hasColor = m.has('color')

Найдите количество предметов на карте

Используйте свойство размер :

const size = m.size

Инициализировать карту значениями

Вы можете инициализировать карту с помощью набора значений:

const m = new Map([['color', 'red'], ['owner', 'Flavio'], ['age', 2]])

Ключи к карте

Точно так же, как любое значение (объект, массив, строка, число) может быть использовано в качестве значения записи ключ-значение элемента карты, любое значение может быть использовано в качестве ключа , даже предметы.

Если вы попытаетесь получить несуществующий ключ с помощью get() из карты, он вернет неопределенный .

Странные ситуации, которые вы почти никогда не встретите в реальной жизни

const m = new Map()
m.set(NaN, 'test')
m.get(NaN) //test
const m = new Map()
m.set(+0, 'test')
m.get(-0) //test

Перебор по карте

Перебор ключей карты

Карта предлагает метод keys() , который мы можем использовать для перебора всех ключей:

for (const k of m.keys()) {
  console.log(k)
}

Перебор значений карты

Объект Map предлагает метод values() , который мы можем использовать для перебора всех значений:

for (const v of m.values()) {
  console.log(v)
}

Перебор пар ключ-значение карты

Объект Map предлагает метод entries() , который мы можем использовать для перебора всех значений:

for (const [k, v] of m.entries()) {
  console.log(k, v)
}

который может быть упрощен до

for (const [k, v] of m) {
  console.log(k, v)
}

Преобразовать в массив

Преобразуйте ключи карты в массив

const a = [...m.keys()]

Преобразуйте значения карты в массив

const a = [...m.values()]

Слабая карта

Слабая карта – это особый вид карты.

В объекте карты элементы никогда не собираются мусором. Вместо этого слабая карта позволяет всем ее элементам свободно собирать мусор. Каждый ключ слабой карты является объектом. Когда ссылка на этот объект теряется, значение может быть собрано мусором.

Вот основные отличия:

  1. вы не можете перебирать ключи или значения (или значения ключей) слабой карты
  2. вы не можете удалить все элементы из слабой карты
  3. вы не можете проверить его размер

Слабая карта предоставляет те методы, которые эквивалентны методам карты:

  • получить(k)
  • набор(k, v)
  • имеет(k)
  • удалить(k)

Варианты использования WeakMap менее очевидны, чем варианты использования карты, и вы, возможно, никогда не обнаружите в них необходимости, но, по сути, их можно использовать для создания кэша, чувствительного к памяти, который не будет мешать сборке мусора, или для тщательной инкапсуляции и сокрытия информации.

Оригинал: “https://flaviocopes.com/javascript-data-structures-map/”