1
resposta

[Dúvida] Como validar o resultado do filter?

No exercício 2, tentei implementar uma msg caso nenhum filme tenha sido lançado no ano pesquisado, porém fiquei muito confuso em como lidar com o array vazio '[ ]' que retorna do método .filter. Poderia me explicar por que utilizando [] no if ternario, o código não interpreta isso como 'vazio' ou false e me retorna como se fosse um valor true?

Aqui o código e os logs pros argumentos:

//lista:
const catalogoFilmes = [
    { id: 1, titulo: "Matrix", diretor: "Lana Wachowski", anoLancamento: 1999 },
    { id: 2, titulo: "Jurassic Park", diretor: "Steven Spielberg", anoLancamento: 1993 },
    { id: 3, titulo: "Inception", diretor: "Christopher Nolan", anoLancamento: 2010 }
]

//função:

function filtrarFilmesPorAno(ano) {
    return catalogoFilmes.filter(filme => filme.anoLancamento === ano);
}

//validação:
const filmeEncontrado = filtrarFilmesPorAno();
console.log(filmeEncontrado != [] ? filmeEncontrado : 'Nenhum filme lançado neste ano');

Argumento 'true':

const filmeEncontrado = filtrarFilmesPorAno(1999);

//log:
[
  {
    id: 1,
    titulo: 'Matrix',
    diretor: 'Lana Wachowski',
    anoLancamento: 1999
  }
]

//como esperado!

Argumento 'false':

const filmeEncontrado = filtrarFilmesPorAno(1990);

//log:

[]

//o esperado seria 'Nenhum filme lançado neste ano'

Espero que eu tenha expressado minha dúvida de maneira clara.

1 resposta

Boa noite, Daniel! Tudo bem? Não tenho muito ideia do curso que você está fazendo, mas vou tentar te ajudar. No Javascript, os arrays são do tipo 'object', podemos conferir isso da seguinte maneira:

Quando você compara objetos, nós não estamos comparando o conteúdo em si dele, mas sim a referência do endereço de memória, é por isso que esse comparação aqui também não funciona:

Como eu mostrei, o Array é um object. No final das contas, estamos comparando object com object, e não seu conteúdo em si. É por isso que ele sempre retorna como true na sua comparação. Visto que não é o conteúdo que está sendo comparado.

Uma maneira que você poderia usar para saber se há itens no array é utilizando a propriedade .length comparando se é maior que 0