As outras respostas não mencionam uma última diferença entre objetos Map
es:
O Map
objeto contém pares de valores-chave e lembra a ordem de inserção original das chaves .
Assim, ao iterar sobre ele, um objeto Map retorna chaves em ordem de inserção.
Citação de MDN , ênfase minha
Essa foi a principal razão pela qual decidi usar Map
pela primeira vez em um projeto recente. Eu tinha um objeto normal que precisava exibir em um <table>
, com cada propriedade em uma linha específica.
let productPropertyOrder = [ "name", "weight", "price", "stocked" ];
let product =
{
name: "Lasagne",
weight: "1kg",
price: 10,
stocked: true
}
Eu escrevi uma função para transformar um objeto em um Map
acordo com uma ordem de chave desejada:
function objectToMap( obj, order )
{
let map = new Map();
for ( const key of order )
{
if ( obj.hasOwnProperty( key ) )
{
map.set( key, obj[ key ] );
}
}
return map;
}
Em seguida, o mapa pode ser iterado na ordem desejada:
let productMap = objectToMap( product, productPropertyOrder );
for ( const value of productMap.values() )
{
let cell = document.createElement( "td" );
cell.innerText = value;
row.appendChild( cell );
}
É claro que isso é um pouco artificial, porque é possível exibir ao iterar a ordem da propriedade sem criar um Map
no processo:
for ( const key of productPropertyOrder )
{
if ( product.hasOwnProperty( key ) )
{
let value = product[ key ];
// create cell
}
}
Mas se você tem uma variedade desses objetos e os exibe em muitos lugares, primeiro faz sentido convertê-los em mapas.