Die anderen Antworten erwähnen keinen letzten Unterschied zwischen Objekten und Map
s:
Das Map
Objekt enthält Schlüssel-Wert-Paare und speichert die ursprüngliche Einfügereihenfolge der Schlüssel .
Wenn Sie also darüber iterieren, gibt ein Map-Objekt die Schlüssel in der Reihenfolge ihrer Einfügung zurück.
Zitat aus MDN , Hervorhebung von mir
Dies war der Hauptgrund, warum ich mich zum Map
ersten Mal für ein Projekt entschieden habe. Ich hatte ein normales Objekt, das ich in einem anzeigen musste <table>
, wobei jede Eigenschaft in eine bestimmte Zeile ging.
let productPropertyOrder = [ "name", "weight", "price", "stocked" ];
let product =
{
name: "Lasagne",
weight: "1kg",
price: 10,
stocked: true
}
Ich habe eine Funktion geschrieben, um ein Objekt Map
gemäß einer gewünschten Tastenreihenfolge in eine umzuwandeln :
function objectToMap( obj, order )
{
let map = new Map();
for ( const key of order )
{
if ( obj.hasOwnProperty( key ) )
{
map.set( key, obj[ key ] );
}
}
return map;
}
Dann könnte die Karte in der gewünschten Reihenfolge durchlaufen werden:
let productMap = objectToMap( product, productPropertyOrder );
for ( const value of productMap.values() )
{
let cell = document.createElement( "td" );
cell.innerText = value;
row.appendChild( cell );
}
Dies ist natürlich ein wenig umständlich, da man es genauso gut anzeigen kann, wenn man die Eigenschaftsreihenfolge durchläuft, ohne dabei eine zu erstellen Map
:
for ( const key of productPropertyOrder )
{
if ( product.hasOwnProperty( key ) )
{
let value = product[ key ];
// create cell
}
}
Wenn Sie jedoch über eine Reihe solcher Objekte verfügen und diese an vielen Stellen anzeigen möchten, ist es zunächst sinnvoll, sie alle in Karten zu konvertieren.