Olá Mauricio, tudo bem?
Para fazer isso eu vou apenas utilizar um exemplo com os dados já fixos, ao invés de ser buscado em funções, ok?
Então nossos dados serão:
Equivale ao negociacoesJaImportadas
const listaDeNegociacoes = [
{ id: 1, nome: "Negociacao1"},
{ id: 2, nome: "Negociacao2"},
{ id: 3, nome: "Negociacao3"},
{ id: 4, nome: "Negociacao4"},
{ id: 5, nome: "Negociacao5"},
]
Equivale ao Negociacoes Para Importar
const negociacoesImportadas = [
{ id: 7, nome: "Negociacao7"},
{ id: 2, nome: "Negociacao2"},
{ id: 9, nome: "Negociacao9"},
{ id: 3, nome: "Negociacao3"},
]
Então no caso o que queremos é filtrar as negociações diferentes, no caso a de número 7 e 9.
O código será igual o da aula, portanto:
negociacoesImportadas.filter( negociacao => {
return !listaDeNegociacoes.some( negociacaoNaLista => negociacaoNaLista.id === negociacao.id)
})
A única diferença é que o ehIgual
no meu caso é a comparação entre id
Vamos por partes:
- O filter recebe uma função que tem o retorno booleano, de forma que ele vai pegar todos os elementos que deram true
O some
vai ser essa função, o que ele faz é verificar se em uma lista existe um elemento que estamos buscando, então por exemplo na primeira execução:
negociacoesImportadas.filter( negociacao =>`
Essa nossa variável negociação equivale:
{ id: 7, nome: "Negociacao7"},
Dentro do some o que vamos fazer é comparar cada elemento da nossa lista de negociações com a atual:
1 != 7
2 != 7
....
5 != 7
Bem, percorremos todas e não há nenhuma igual, portanto a resposta do some
é falso, isto é: Em nossa lista de negociações não há nenhuma parecida com essa
E aqui vem a utilização do !
, veja que eu disse que o filter
recebe uma função que devolve um valor booleano, como esse valor foi false
, portanto não iremos colocar na nossa lista, para reverter isso negamos a resposta do some
para termos true
Então o filter
recebe true
e armazena no array de resposta a negociação de número 7
Na segunda execução do filter
teremos:
{ id: 2, nome: "Negociacao2"},
Dentro do some, teremos o mesmo processo:
1 != 2
2 == 2
Bem, encontramos um elemento, então o resultado do some
vai ser true
, com a negação mudamos para false
e como vimos, não será armazenado no array final
Após todas iterações teremos um array apenas com as negociações não incluída:
{ id: 7, nome: "Negociacao7"},
{ id: 9, nome: "Negociacao9"},
Depois temos apenas o forEach
para adicionar na lista de negociações essas novas:
.forEach(negociacao =>
this._negociacoes.adiciona(negociacao));
No meu exemplo equivaleria a:
.forEach( negociacaoNaoAdicionada => listaDeNegociacoes.push(negociacaoNaoAdicionada))
Conseguiu Compreender dessa forma?
Abraços e Bons Estudos!