mapValues & friends
Transforma cada valor, cada clave o la entrada (clave, valor) completa de un map.
Lección
El resto de la sección 9 selecciona de un map —
pick,
omit,
pickBy,
omitBy — o lee una parte de él.
Estos tres lo transforman. mapValues pasa cada valor
por un callback y deja las claves en paz, mapKeys hace lo
contrario, y mapEntries toma el record
(clave, valor) entero y devuelve uno nuevo.
Ese record tiene la misma forma que ya usan pickBy,
omitBy y
fromEntries, así que los
cuatro componen sin adaptadores: filtras con uno y transformas con el
otro. mapEntries generaliza a los otros dos: intercambiar
e.$1 y e.$2 invierte un map en una sola llamada.
mapValues no puede perder ninguna entrada, porque las claves
quedan intactas. mapKeys y mapEntries sí pueden:
si el callback lleva dos claves al mismo resultado, gana la
última en orden de iteración, exactamente como haría una
clave repetida en un literal de map. Por lo demás el orden de inserción
sobrevive, siguiendo la primera aparición de cada clave nueva.
Aquí no hay filter ni filterWithKey, y es
deliberado. pickBy y omitBy ya toman el record
completo, así que ignorar una mitad es la forma de filtrar por la otra;
míralo en la segunda demo.
Compara con evolve, aquí al lado:
transforma los valores de claves concretas y deja pasar el resto.
mapValues es el caso en que todos los valores reciben el
mismo trato.
Demo 1 · Fundamentos
Demo 2 · Colisiones, y filtrar al lado
Pruébalo tú
Ejercicio: convierte cada puntuación en una nota con letra, conservando los nombres.
evolve — transforma solo los valores de las claves indicadas ·
pickBy / omitBy — los filtros que conocen la clave, con el mismo record ·
fromEntries — construye un map a partir de records ·
compactObject — quita los valores null