Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Duvida forma de escrita do filter

Olá, galera.

Durante o curso na aula de remoção do usuário, eu encontrei um problema com o filter...

Se o filter for escrito como aqui mostrado, o método delete apaga todo o array.

async deletar(id: string) {
    const usuario = this.buscarPorId(id);
    this.usuarios = this.usuarios.filter((usuarioSalvo) => {
      if (usuarioSalvo.id === id) return;
    });
    return usuario;
  }

Mas se for escrito assim, ele apaga somente o usuário que a gente passa no ID.

async deletar(id: string) {
    const usuario = this.buscarPorId(id);
    this.usuarios = this.usuarios.filter(
      (usuarioSalvo) => usuarioSalvo.id !== id,
    );
    return usuario;
  }

Teoricamente da primeira forma ele deveria desempenhar a mesma função já que se o ID do item atual no loop for igual ao ID informado para remoção, ele faz ir para a próxima interação ou estou errado? Alguém consegue me explicar o porque desse comportamento?

2 respostas
solução!

Olá, Leonardo!

A diferença entre as duas formas de escrita do filter está na lógica de filtragem dos elementos do array.

Na primeira forma, você está utilizando uma estrutura de controle if para verificar se o ID do usuário salvo é igual ao ID informado para remoção. No entanto, você não está retornando nada dentro do if, o que faz com que o filter retorne um array vazio, apagando todos os elementos.

Já na segunda forma, você está utilizando a expressão usuarioSalvo.id !== id como condição de filtro. Nesse caso, o filter irá retornar apenas os elementos do array que possuem um ID diferente do ID informado para remoção. Dessa forma, apenas o usuário com o ID correspondente será removido.

Portanto, a segunda forma é a correta para realizar a remoção do usuário desejado.

Espero ter ajudado e bons estudos!

Fala Renan, obrigado pela resposta.

No caso então o "Return" dentro do filter é encarado como uma comando de saída, eu achei que ele só iria passar para a próxima interação como se fosse um "continue";