2016-02-11 18 views
31

Diciamo che ho la seguente mappa:Come convertire le chiavi della mappa in array?

let myMap = new Map().set('a', 1).set('b', 2); 

E voglio ottenere [ 'a', 'b'] in base a quanto sopra esposto. La mia attuale soluzione sembra così lunga e orribile.

let myMap = new Map().set('a', 1).set('b', 2); 
let keys = []; 
for (let key of myMap) 
    keys.push(key); 
console.log(keys); 

Ci deve essere un modo migliore, no?

+6

Forse 'Array.from (Map.keys())'. –

+0

http://stackoverflow.com/questions/8763125/get-array-of-objects-keys –

+3

@gK. Non funziona con 'Mappa'. – pawel

risposta

76

Map.keys() restituisce un oggetto MapIterator che può essere convertito in Array utilizzando Array.from:

let keys = Array.from(myMap.keys()); 
// ["a", "b"] 

EDIT: è anche possibile convertire oggetto iterabile di array usando spread syntax

let keys =[ ...myMap.keys() ]; 
// ["a", "b"] 
+4

Mi piace l'uso dello Spread Operator, tuttavia, il mio transpiler TypeScript lancia 'this.map.values ​​(). Slice non è una funzione'. Forse dovrei aggiornare. – Cody

+1

@Cody perché la tua chiamata 'slice()' viene eseguita prima dell'operatore di spread. Prova '[... Array.from (map.values ​​()). Slice (0)]' – mgthomas99

0

È possibile utilizzare l'operatore diffusione per convertire Map.keys() iteratore in una matrice.

let myMap = new Map().set('a', 1).set('b', 2).set(983, true) 
 
let keys = [...myMap.keys()] 
 
console.log(keys)

Problemi correlati