Aprende Lodash: _.differenceBy, encuentra la diferencia entre arrays según un valor dado

Según la documentación de lodash, _.differenceBy es como _.difference, excepto que acepta un iteratee que se invoca para cada elemento del array y para los valores con el fin de generar el criterio según el cual se comparan. El orden y las referencias de los valores del resultado están determinados por el primer array. El iteratee se invoca con un argumento:

El iteratee puede ser una función o un valor.

Este desafío requiere que escribas tu propia versión de esta función sin usar lodash para que puedas comprender mejor cómo funciona.

Imagina que tienes un concesionario de automóviles con dos estacionamientos. Usando la función difference de lodash, compararías un estacionamiento con el otro y obtendrías una lista de todos los automóviles que son diferentes de los del otro estacionamiento. Pero si tu gerente quisiera saber qué automóviles son diferentes únicamente por el color, querrías usar difference by. La comparación "color" es entonces el iteratee. En este caso, es solo un valor que usas para comparar, pero differenceBy también puede recibir una función. Imagina que tu jefe quiere que obtengas la diferencia según la antigüedad del automóvil; entonces tendrías que calcular la antigüedad de cada automóvil. Eso es lo que hace que esto sea mucho más desafiante que la función difference.

Argumentos

  • array (Array): El array que se debe inspeccionar.
  • [values] (...Array): El número de arrays que contienen los valores que se deben excluir.
  • iteratee - una función o valor de comparación que se invoca para cada argumento.

Devuelve

  • (Array): Devuelve el nuevo array de valores filtrados.

Ejemplos

differenceBy([{ "x": 2 }, { "x": 1 }], [{ "x": 1 }], "x");
➞ [{ "x": 2 }]

differenceBy(["orange", "pear", "banana"], ["apple", "pear", "grape"], ["apple", "pear", "banana"], (s) => s.includes("o")),
➞ ["orange"]
  • No intentes importar lodash; simplemente estás escribiendo tu propia versión.
  • Esta serie completa de desafíos se puede encontrar aquí.