differenceBy
difference, comparando por una clave calculada en vez de por igualdad de valor.
Lección
differenceBy(f, iterable1, iterable2) sigue exactamente la
misma regla de orden de argumentos que difference:
el resultado sale de iterable2, y conserva
solo los elementos cuya clave f no aparezca entre
las claves f de iterable1 (colapsando los
duplicados del resultado). La función f se aplica a
ambos iterables, así que — a diferencia de
differenceBy en otros lenguajes — ambos argumentos deben
compartir el mismo tipo de elemento A; lo único que se
compara es el tipo de clave derivado B.
Esta es la forma que buscas cuando la «lista de exclusión» y la «lista
de origen» son registros completos y no valores sueltos: una lista de
objetos de usuario bloqueados y una lista de objetos de usuario,
emparejadas por id; o una lista de productos no disponibles
y un catálogo de productos, emparejados por sku.
difference no es más que
differenceBy((a) => a, iterable1, iterable2). No hay
método de cadena para ninguna de las dos — llama directamente a la
función data-first. En el lado asíncrono, el marcador de concurrencia se
aplica a iterable2, igual que en
differenceAsync.
Demo 1 · Fundamentos
Demo 2 · Asíncrono, con concurrencia
Pruébalo tú
Ejercicio: usa differenceBy (con clave 'sku')
para encontrar los productos que siguen disponibles.
difference — la versión por igualdad de valor ·
intersectionBy — quedarse con los que comparten la clave calculada ·
uniqBy — elimina duplicados de un solo iterable por clave ·
compress — filtra con una máscara booleana paralela