2015-09-01 15 views
5

Per "mappare" un oggetto Mappa è necessario prima di tutto destrutturarlo su un array di matrici. Questo mi sembra all'indietro.Perché Map non ha un metodo mappa?

Qualcuno può spiegarmi quale è la logica del design dietro a questo? Comprendo che altri linguaggi come Scala hanno metodi mappa per Maps, quindi sto cercando di capire perché non sono disponibili in Javascript.

Questa sintassi sembra così inutilmente complesso e verbose:

let mappedMap = new Map( 
    [...originalMap] 
    .map(([k, v]) => [k * 2, '_' + v]) 
); 

Non potrebbe essere qualcosa di simile?

let mappedMap = originalMap.map((k, v) => [k * 2, '_' + v]); 
+4

Si dovrebbe fare questa domanda in un luogo frequentato dal comitato. La maggior parte degli estranei non ha un'idea delle loro decisioni. –

+0

Almeno dovrebbe essere 'lasciare mappedMap = new Map (Array.from (originalMap, ([k, v]) => [k * 2, '_' + v])))' per evitare una copia extra del array. È anche banale creare una versione iterabile. Direi che la risposta è "perché può sempre essere aggiunto in seguito ed è banale da implementare in un modulo separato". Inoltre un 'Iterable.map' generale sarebbe più utile e anche questo è mancante. – loganfsmyth

+3

Afaik il problema doveva essere risolto con metodi generici su iteratori, non su 'Map's stessi. E iirc, non c'era molto tempo o consenso o nessuna proposta su come esattamente fare questi al momento in cui la specifica ES6 è finita, quindi è stata lasciata fuori. Sono facili da riempire, ci aspettiamo che le libere delle userland saltino dentro. Non appena emergeranno modelli di utilizzo, verrà presa in considerazione una standardizzazione. La stessa procedura dei metodi di iterazione 'Array'. – Bergi

risposta

0

mappa su ES6 è attualmente rappresentato come un iterabile con un sistema di chiave/valore. E la funzione mappa dell'array restituisce una nuova matrice. Non sono sicuro se sarebbe possibile restituire una nuova versione in questo modo. Vorrei usare forEach per Maps e costruirne di nuovi da lì. Se mai è possibile creare una funzione con la stessa funzionalità e consiglio anche immutable.js

Problemi correlati