คำตอบอื่น ๆ ไม่ได้พูดถึงหนึ่งความแตกต่างสุดท้ายระหว่างวัตถุและMap
s:
Map
วัตถุถือคู่ค่าคีย์และจำเพื่อแทรกเดิมของคีย์
ดังนั้นเมื่อวนซ้ำวัตถุแผนที่จะส่งคืนคีย์ตามลำดับการแทรก
อ้างจากMDN , เน้นเหมือง
นี่คือเหตุผลหลักที่ฉันตัดสินใจใช้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 );
}
แน่นอนว่านี่เป็นบิตที่ถูกประดิษฐ์ขึ้นเพราะเราสามารถแสดงได้ดีเมื่อวนคำสั่งคุณสมบัติโดยไม่ต้องสร้าง a Map
ในกระบวนการ:
for ( const key of productPropertyOrder )
{
if ( product.hasOwnProperty( key ) )
{
let value = product[ key ];
// create cell
}
}
แต่ถ้าคุณมีอาร์เรย์ของวัตถุดังกล่าวและกำลังจะแสดงให้พวกเขาหลายแห่งแล้วแปลงพวกเขาทั้งหมดเป็นแผนที่ก่อนทำให้รู้สึก