Pozostałe odpowiedzi nie wspominają o ostatniej różnicy między obiektami a Map
s:
Map
Obiekt posiada par klucz-wartość i zapamiętuje oryginalną kolejność wkładania kluczy .
Zatem podczas iteracji nad nim obiekt Map zwraca klucze w kolejności wstawiania.
Cytat z MDN , moje podkreślenie
To był główny powód, dla którego zdecydowałem się wykorzystać Map
po raz pierwszy w ostatnim projekcie. Miałem normalny obiekt, który musiałem wyświetlić w <table>
, a każda właściwość znajdowała się w określonym rzędzie.
let productPropertyOrder = [ "name", "weight", "price", "stocked" ];
let product =
{
name: "Lasagne",
weight: "1kg",
price: 10,
stocked: true
}
Napisałem funkcję przekształcania obiektu w Map
odpowiedni klucz według kolejności:
function objectToMap( obj, order )
{
let map = new Map();
for ( const key of order )
{
if ( obj.hasOwnProperty( key ) )
{
map.set( key, obj[ key ] );
}
}
return map;
}
Następnie mapę można iterować w żądanej kolejności:
let productMap = objectToMap( product, productPropertyOrder );
for ( const value of productMap.values() )
{
let cell = document.createElement( "td" );
cell.innerText = value;
row.appendChild( cell );
}
Oczywiście jest to nieco wymyślone, ponieważ równie dobrze można wyświetlać podczas iteracji po porządku właściwości bez tworzenia Map
w tym procesie:
for ( const key of productPropertyOrder )
{
if ( product.hasOwnProperty( key ) )
{
let value = product[ key ];
// create cell
}
}
Ale jeśli masz szereg takich obiektów i zamierzasz wyświetlać je w wielu miejscach, to najpierw warto je przekonwertować na mapy.