Aprenda Lodash (3): _.differenceWith, encontre a diferença entre arrays usando uma função de comparação

De acordo com a documentação do lodash, este método é semelhante a _.difference, exceto que aceita um comparador que é chamado para comparar os elementos do array com os valores. A ordem e as referências dos valores do resultado são determinadas pelo primeiro array. O comparador é chamado com dois argumentos: (arrVal, othVal).

Este desafio exige que você escreva sua própria versão desta função sem usar lodash, para que possa entender melhor como ela funciona.

Usando o exemplo de uma concessionária de automóveis, se você tiver dois estacionamentos e quiser ver quais carros são diferentes, esta função permite verificar cada carro de um estacionamento em relação a cada carro do outro usando uma função de comparação que verifica dois valores e retorna true ou false caso sejam iguais ou não. Assim, você poderia verificar o tamanho do motor e comparar para ver quais carros são diferentes de acordo com o tamanho de seus motores. Se o estacionamento um tiver um carro com motor v6 e o estacionamento dois não tiver nenhum carro com motor v6, essa seria a diferença, e a função retornaria o carro com motor v6.

Há apenas um primeiro array usado para procurar a diferença, mas pode haver muitos arrays de valores usados para comparação.

Exemplos

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

  • Não tente importar lodash; você está simplesmente escrevendo sua própria versão.
  • Esta série completa de desafios pode ser encontrada aqui.