Aprende Lodash (3): _.differenceWith, encuentra la diferencia entre arreglos mediante una función de comparación

Según la documentación de lodash, este método es similar a _.difference, excepto que acepta un comparador que se invoca para comparar los elementos del arreglo con los valores. El orden y las referencias de los valores del resultado están determinados por el primer arreglo. El comparador se invoca con dos argumentos: (arrVal, othVal).

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.

Usando un ejemplo de concesionario de automóviles, si tienes dos estacionamientos y quieres ver qué autos son diferentes, esta función te permite comparar cada auto de un lote con cada auto del otro mediante una función de comparación que verifica dos valores y devuelve true o false según sean iguales o no. Así, podrías comprobar el tamaño del motor y comparar para ver qué autos son diferentes según el tamaño de sus motores. Si el lote uno tiene un auto con motor v6 y el lote dos no tiene ningún auto con motor v6, esa sería la diferencia y la función devolvería el auto con motor v6.

Solo hay un primer arreglo que se usa para buscar la diferencia, pero puede haber muchos arreglos de valores que se usan para comparar.

Ejemplos

differenceWith([
  { make: "mazda", engine: "v8" },   // This is the first array we compare with.
  { make: "toyota",  engine: "v6" },
],
  [{ make: "toyota", engine: "v8" }],  // The second array we compare against.
  (a, b) => a.engine === b.engine    // This is the comparator that compares the two values.
) ➞ [
  { make: "toyota",  engine: "v6" },  // This is in the first array but none of the others.
]

Notas

  • No intentes importar lodash; simplemente estás escribiendo tu propia versión.
  • Esta serie completa de desafíos se puede encontrar aquí.