Inizializzazione della mappa in dattiloscritto [duplicato]

Aug 17 2020

Sto cercando di inizializzare sotto Map in dattiloscritto. Quando lo stampo, sembra essere vuoto.

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

Risposte

1 MauriceNino Aug 17 2020 at 14:35

È inizializzato correttamente, ma stampandolo non vengono stampati tutti i valori come un array. Ma puoi verificarlo semplicemente accedendo alle chiavi: esistono:

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"'));

Anche rilevante: come posso visualizzare un oggetto mappa ES6 javascript nella console?

Come affermato lì puoi semplicemente diffondere la mappa e stamparla:

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

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

JessevanAssen Aug 17 2020 at 14:35

Questo perché JSON.stringifynon sa come stringere una mappa, quindi proverà invece a stringere l'oggetto sottostante, il che si traduce in un oggetto vuoto.

Prova console.log(JSON.stringify([...a.entries()]));invece

NiettheDarkAbsol Aug 17 2020 at 14:35

La stringa di un oggetto implica la stringa delle sue proprietà, ma a Mapnon usa le proprietà per salvare i suoi dati. Quindi ottieni un oggetto vuoto se lo stringa ingenuamente.

Invece convertilo prima in un array:

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

Quando usi JSON.stringify () su una mappa, ti darà sempre {}. Se il dattiloscritto dice che lo stai facendo bene, la mappa è stata probabilmente inizializzata correttamente.