В разделе Преобразование типов вы написали: «Не очень удобно преобразовывать карту в объект (и наоборот), поэтому вам придется полагаться на функцию. понравились те, что ниже». На самом деле теперь (по состоянию на 08/2019), когда у нас есть оба метода Object.entries()
и новый Object.fromEntries()
(Chrome 73, FF 63, Safari 12.1 и т. д.), мы можем сделать это без каких-либо вспомогательных функций.
Пример:
const workers = { John: 33, Helen: 30, Mike: 44, Mary: 19 }; const mapWorkers = new Map(Object.entries(workers)); const objWokersFromMap = Object.fromEntries(mapWorkers); console.log(mapWorkers); // Map(4) {“John” => 33, “Helen” => 30, “Mike” => 44, “Mary” => 19} console.log(objWokersFromMap); // {John: 33, Helen: 30, Mike: 44, Mary: 19}
Предупреждение об использовании Object.fromEntries()
с Map
(из: https://v8.dev/features/object-fromentries)
Предупреждение: остерегайтесь потери данных
При преобразовании карт в простые объекты существует неявное предположение, что каждый ключ имеет уникальную строку. Если это предположение не выполняется, происходит потеря данных:
const map = new Map([
[{}, 'a'],
[{}, 'b'],
]);
Object.fromEntries(map);
// → { '[object Object]': 'b' }
// Note: the value 'a' is nowhere to be found, since both keys
// stringify to the same value of '[object Object]'.
Прежде чем использовать Object.fromEntries
или любую другую технику для преобразования карты в объект, убедитесь, что ключи карты дают уникальные toString
результаты.