การเริ่มต้นแผนที่ใน typescript [ซ้ำ]

Aug 17 2020

ฉันกำลังพยายามเริ่มต้นด้านล่างแผนที่ใน typescript พอพิมพ์ดูเหมือนจะว่างเปล่า

let map: Map<string, object> = new Map<string, object> ([
    [
        "api/service/method",
        {
            uriPath: {}
        }
    ],
    [
        "\"type\": \"html\"",
        {
            body: {}
        }
    ]
]);

console.log(JSON.stringify(map));
// printing {}
// but not the initialized values

คำตอบ

1 MauriceNino Aug 17 2020 at 14:35

เริ่มต้นอย่างถูกต้อง แต่การพิมพ์ไม่ได้พิมพ์ค่าทั้งหมดเหมือนอาร์เรย์ แต่คุณสามารถตรวจสอบได้โดยเพียงแค่เข้าถึงคีย์ - มีอยู่:

let map = new Map([
    [
        "api/service/method",
        {
            uriPath: {}
        }
    ],
    [
        "\"type\": \"html\"",
        {
            body: {}
        }
    ]
]);

console.log(map);
console.log(map.get('api/service/method'));
console.log(map.get('"type": "html"'));

เกี่ยวข้องด้วย: ฉันจะแสดงวัตถุแผนที่ javascript ES6 ในคอนโซลได้อย่างไร

ตามที่ระบุไว้ที่นั่นคุณสามารถกางแผนที่และพิมพ์:

let map = new Map([
    [
        "api/service/method",
        {
            uriPath: {}
        }
    ],
    [
        "\"type\": \"html\"",
        {
            body: {}
        }
    ]
]);

console.log([...map]);

JessevanAssen Aug 17 2020 at 14:35

นั่นเป็นเพราะJSON.stringifyไม่ทราบวิธีการสร้างแผนที่ดังนั้นมันจะพยายามสตริงวัตถุที่อยู่ข้างใต้แทนซึ่งส่งผลให้วัตถุว่างเปล่า

ลองconsole.log(JSON.stringify([...a.entries()]));แทน

NiettheDarkAbsol Aug 17 2020 at 14:35

การสตริงอ็อบเจ็กต์เกี่ยวข้องกับการกำหนดคุณสมบัติของอ็อบเจ็กต์ แต่Mapไม่ได้ใช้คุณสมบัติเพื่อบันทึกข้อมูล ดังนั้นคุณจะได้รับวัตถุว่างเปล่าถ้าคุณผูกมันอย่างไร้เดียงสา

แทนที่จะแปลงเป็นอาร์เรย์ก่อน:

console.log(JSON.stringify([...map]));
LionelFoxcroft Aug 17 2020 at 14:39

เมื่อคุณใช้ JSON.stringify () บนแผนที่มันจะให้ {} เสมอ หาก typescript บอกว่าคุณทำถูกต้องแสดงว่าแผนที่อาจเริ่มต้นอย่างถูกต้อง