¿Cómo harías esto? Instintivamente, quiero hacer:
var myMap = new Map([["thing1", 1], ["thing2", 2], ["thing3", 3]]); // wishful, ignorant thinking var newMap = myMap.map((key, value) => value + 1); // Map { 'thing1' => 2, 'thing2' => 3, 'thing3' => 4 }No he obtenido mucho de la documentación sobre el nuevo protocolo de iteración .
Conozco wu.js , pero estoy ejecutando un proyecto de Babel y no quiero incluir Traceur , del que parece depender actualmente .
Tampoco tengo ni idea de cómo extraer cómo lo hizo fitzgen/wu.js en mi propio proyecto.
Me encantaría una explicación clara y concisa de lo que me estoy perdiendo aquí. ¡Gracias!
Entonces, .map en sí solo ofrece un valor que le interesa... Dicho esto, hay algunas formas de abordar esto:
// instantiation const myMap = new Map([ [ "A", 1 ], [ "B", 2 ] ]); // what's built into Map for you myMap.forEach( (val, key) => console.log(key, val) ); // "A 1", "B 2" // what Array can do for you Array.from( myMap ).map(([key, value]) => ({ key, value })); // [{key:"A", value: 1}, ... ] // less awesome iteration let entries = myMap.entries( ); for (let entry of entries) { console.log(entry); } Tenga en cuenta que estoy usando muchas cosas nuevas en ese segundo ejemplo... ... Array.from toma cualquier iterable (siempre que use [].slice.call( ) , más Conjuntos y Mapas) y convierte en una matriz... ...Los mapas, cuando se coaccionan en una matriz, se convierten en una matriz de matrices, donde el[0] === key && el[1] === value; (básicamente, en el mismo formato con el que prellené mi Mapa de ejemplo, arriba).
Estoy usando la desestructuración de la matriz en la posición del argumento de la lambda, para asignar esos puntos de la matriz a los valores, antes de devolver un objeto para cada el.
Si está utilizando Babel, en producción, necesitará usar el polyfill del navegador de Babel (que incluye "core-js" y el "regenerador" de Facebook).
Estoy bastante seguro de que contiene Array.from .
Simplemente use Array.from(iterable, [mapFn]) .
var myMap = new Map([["thing1", 1], ["thing2", 2], ["thing3", 3]]); var newEntries = Array.from(myMap, ([key, value]) => [key, value + 1]); var newMap = new Map(newEntries);Solo debe usar el operador Spread :
var myMap = new Map([["thing1", 1], ["thing2", 2], ["thing3", 3]]); var newArr = [...myMap].map(value => value[1] + 1); console.log(newArr); //[2, 3, 4] var newArr2 = [for(value of myMap) value = value[1] + 1]; console.log(newArr2); //[2, 3, 4]