В інших відповідях не згадується остання різниця між об'єктами та Map
s:
Map
Об'єкт містить пари ключ-значення , і запам'ятовує вихідний порядок введення ключів .
Таким чином, під час ітерації над ним об’єкт Map повертає ключі в порядку вставки.
Цитата з MDN , моє наголос
Це було основною причиною, яку я вирішив Map
вперше використати в недавньому проекті. У мене був звичайний об’єкт, який мені потрібно було відобразити в a <table>
, причому кожне властивість буде в певному рядку.
let productPropertyOrder = [ "name", "weight", "price", "stocked" ];
let product =
{
name: "Lasagne",
weight: "1kg",
price: 10,
stocked: true
}
Я написав функцію для перетворення об'єкта на Map
відповідний бажаному порядку клавіш:
function objectToMap( obj, order )
{
let map = new Map();
for ( const key of order )
{
if ( obj.hasOwnProperty( key ) )
{
map.set( key, obj[ key ] );
}
}
return map;
}
Тоді карту можна повторити в потрібному порядку:
let productMap = objectToMap( product, productPropertyOrder );
for ( const value of productMap.values() )
{
let cell = document.createElement( "td" );
cell.innerText = value;
row.appendChild( cell );
}
Звичайно, це трохи надумано, оскільки можна було б так само добре відображатись при ітерації над замовленням власності, не створюючи Map
в процесі:
for ( const key of productPropertyOrder )
{
if ( product.hasOwnProperty( key ) )
{
let value = product[ key ];
// create cell
}
}
Але якщо у вас є масив таких об’єктів і ви збираєтесь відображати їх багато місць, то перетворення їх усіх на карти спочатку має сенс.