compress
Conserva los elementos de un iterable allí donde una lista paralela de booleanos vale true.
Lección
compress es una máscara posicional: el elemento i de
iterable sobrevive solo si selectors[i] es
true. Está construido directamente a partir de dos funciones que ya
conoces — map((r) => r.$2, filter((r) => r.$1, zip(selectors, iterable))) —
combina la máscara con los datos, filtra los pares que dan true y desempaqueta. Eso
también significa que hereda el comportamiento de zip ante longitudes
distintas: la iteración se detiene en cuanto se agota el más corto de
selectors o iterable, así que una lista de selectores
corta trunca el resultado en silencio. Úsalo cuando ya tengas de antemano (o puedas
calcular a bajo coste) una máscara booleana — por ejemplo, «qué respuestas
del test fueron correctas» — en vez de recalcular un predicado por elemento como
haría filter.
No hay método de cadena; llama directamente a la función data-first o a su
contraparte asíncrona, o envuelve el resultado con fx(...) /
fxAsync(...) para seguir encadenando.
Demo 1 · Fundamentos & longitudes distintas
Demo 2 · Asíncrono, con concurrencia
Pruébalo tú
Ejercicio: usa compress para quedarte solo con las respuestas
correctas.
filter — filtra por predicado en lugar de por una máscara precalculada ·
zip — la función sobre la que se construye compress ·
differenceBy — filtra por pertenencia a otro iterable ·
partition — divide en conservados/descartados en una sola pasada