Các câu trả lời khác không đề cập đến một sự khác biệt cuối cùng giữa các đối tượng và Map
s:
Đối Map
tượng giữ các cặp khóa-giá trị và ghi nhớ thứ tự chèn ban đầu của các khóa .
Do đó, khi lặp qua nó, một đối tượng Map sẽ trả về các khóa theo thứ tự chèn.
Trích dẫn từ MDN , nhấn mạnh của tôi
Đây là lý do chính khiến tôi quyết định sử dụng Map
lần đầu tiên trong một dự án gần đây. Tôi đã có một đối tượng bình thường mà tôi cần hiển thị trong một <table>
, với mỗi thuộc tính đi theo một hàng cụ thể.
let productPropertyOrder = [ "name", "weight", "price", "stocked" ];
let product =
{
name: "Lasagne",
weight: "1kg",
price: 10,
stocked: true
}
Tôi đã viết một hàm để biến đổi một đối tượng thành một Map
thứ tự khóa mong muốn:
function objectToMap( obj, order )
{
let map = new Map();
for ( const key of order )
{
if ( obj.hasOwnProperty( key ) )
{
map.set( key, obj[ key ] );
}
}
return map;
}
Sau đó, bản đồ có thể được lặp đi lặp lại theo thứ tự mong muốn:
let productMap = objectToMap( product, productPropertyOrder );
for ( const value of productMap.values() )
{
let cell = document.createElement( "td" );
cell.innerText = value;
row.appendChild( cell );
}
Tất nhiên điều này là một chút giả định bởi vì người ta cũng có thể hiển thị tốt khi lặp qua thứ tự thuộc tính mà không tạo ra Map
trong quá trình:
for ( const key of productPropertyOrder )
{
if ( product.hasOwnProperty( key ) )
{
let value = product[ key ];
// create cell
}
}
Nhưng nếu bạn có một loạt các đối tượng như vậy và sẽ hiển thị chúng ở nhiều nơi, thì việc chuyển đổi tất cả chúng thành bản đồ trước tiên có ý nghĩa.