Преобразование между картой и объектом

JavaScript

by @zhangbao(zhangbao) #0108

Так называемый «объект» здесь относится к использованию чего-то вродеvar obj = {}илиvar obj = new Object()Обычные объекты объявляются таким же образом.

Обзор

  • Преобразование из объекта в карту:new Map(Object.entries(obj))
  • Преобразование из карты в объект:Object.fromEntries(map.entries())

image.png

Два способа создания карты

Когда мы создаем карту, в дополнение к следующему способу

image.png

также можно использоватьnew Map(iterable)грамматика:

image.png

Входящий параметр массива состоит из пары ключ-значение ([key, value])состоит из. Этот способ создания более эффективен, чем использованиеmap.setБолее лаконично и удобно.

map.entries()

один из вышеперечисленных[key, value]Также известен какentry. Мы можем сделать этоentriesполучатьmap, то и изmapполучатьentries. Нужно использоватьMap.prototype.entries()методы, определенные в этом экземпляре карты.

или с указанными выше переменнымиmapПример:

image.png

map.entries()Результатом является итерируемый объект (MapIterator).с помощьюArray.fromИтерируемые объекты можно превратить в настоящие массивы.

Итак, возникает вопрос - как карты и объекты конвертируются друг в друга? ответС записями эта структура данных.

Итак, давайте знакомитьсяObject.entriesметод.

Object.entries

Как подсказывает название,Object.entriesиспользуется для преобразования объекта в структуру записей.

Вот пример:

image.png

Таким образом, мы можем получить форму структуры его записей из объекта. ввести сноваnew Map():

image.png

Преобразование «Объект -> Карта» завершено.

💡 Советы:Стоит отметить, что из-за ограничения типа свойства объекта (то есть тип имени свойства объекта может быть только строкой или значением Symbol).При преобразовании объекта в карту существует не более двух типов ключей карты: строки или значения символов.

Object.fromEntries

имеютObject.entries, естьObject.fromEntries. Последнее является обратным действием первого. Синтаксис следующий:

Object.fromEntries(iterable)

Например:

image.png

Конечно, приведенная выше демонстрация довольно скучна. серьезно ладитьmap.entriesУдобно использовать в комплексе.

а такжеmap.entriesВ сочетании с:

map.entriesМетод был описан выше. Этот метод используется для преобразования карты в представление итерируемого объекта.

let map = new Map([
  ['1',  'str1'],
  [1,    'num1'],
  [true, 'bool1']
]);

Object.fromEntries(map.entries())
// {
//   "1": "num1",
//   "true": "bool1"
// }

Из результата преобразования в объект выше мы можем видеть['1', 'str1']Пара ключ-значение исчезает, остается[1, 'num1']. а также1также становится"1". причина в том,Имя свойства объекта может быть только строкой или символьным значением., который отличается от ключа карты (ключ карты может быть любого типа). В процессе «Карта -> Объект» все ключи не символьного типа в конечном итоге будутObject.fromEntriesМетод обрабатывается и преобразуется в представление строки.

(над)