Другие ответы не упоминают одно последнее различие между объектами и Map
s:
Map
Объект содержит пары ключ-значение , и запоминает исходный порядок ввода ключей .
Таким образом, при итерации по нему объект Map возвращает ключи в порядке вставки.
Цитата из МДН , акцент мой
Это было главной причиной, которую я решил использовать 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
}
}
Но если у вас есть массив таких объектов и вы собираетесь отображать их во многих местах, то сначала имеет смысл преобразовать их все в карты.