Aprenda Lodash: _.differenceBy, encontre a diferença entre arrays de acordo com um valor fornecido

De acordo com a documentação do lodash, _.differenceBy é como _.difference, exceto que aceita um iteratee que é invocado para cada elemento do array e para os valores a fim de gerar o critério pelo qual eles são comparados. A ordem e as referências dos valores do resultado são determinadas pelo primeiro array. O iteratee é invocado com um argumento:

O iteratee pode ser uma função ou um valor.

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

Imagine que você tenha uma concessionária de carros com dois estacionamentos. Usando a função difference do lodash, você compararia um estacionamento com o outro e obteria uma lista de todos os carros que são diferentes dos carros do outro estacionamento. Mas, se seu gerente quisesse saber quais carros são diferentes apenas pela cor, você gostaria de usar difference by. A comparação "color" é então o iteratee. Nesse caso, é apenas um valor que você está usando para comparar, mas differenceBy também pode receber uma função. Imagine que seu chefe queira que você obtenha a diferença pela idade do carro; nesse caso, você teria que calcular a idade de cada carro. É isso que torna este desafio muito mais difícil do que a função difference.

Argumentos

  • array (Array): O array a ser inspecionado.
  • [values] (...Array): O número de arrays que contêm os valores a serem excluídos.
  • iteratee - uma função ou valor de comparação invocado por argumento.

Retorna

  • (Array): Retorna o novo array de valores filtrados.

Exemplos

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"]
  • Não tente importar lodash; você está simplesmente escrevendo sua própria versão.
  • Toda esta série de desafios pode ser encontrada aqui.