1
resposta

[JavaScript: Conhecendo Objetos] [Módulo: 05 -Manipulando Lista de Objetos][Item: 09 - Lista de Exercícios] - Exercício 2

Oi pessoal, tudo bem? Pedindo mais uma ajuda no fórum, porfas!

Estou tentando resolver o exercício 2 utilizando a callback filter, mas colocando uma condicional dentro da função callback que irá fazer a verificação do ano de lançamento do filme. No entanto, quando a condição não é satisfeita (o "if" não é atendido) estou com dificuldades de fazer com que o programa retorne os dados consolidados após todas as iterações sobre os objetos forem feita. Eu não quero que seja apresentado o valor do "else" para toas as iterações. Veja que criei uma variável de mensagem ('msgNotFound') para caso o ano de lançamento não seja encontrado.

Entendo que para cada iteração, o código vai passar pela possibilidade de o ano não é encontrado, já que nem todos os filmes da lista foram lançados no mesmo ano. Entretanto, como eu posso fazer para que o código exiba essa mensagem somente quando NENHUM filme possuir o ano que está sendo usado na comparação?

Meu código:

const listaFilmes = require("./estanteFilmes.json")

const msgNotFound = console.log("Filme não encontrado")


function filtrarfilmesPorAno(anoFilmeUser){
    const filmesAnoUser = listaFilmes.filter(filmes => {
        if(filmes.anoLancamento === anoFilmeUser){
            return filmes
        }
     else{
            return msgNotFound;
        }
    })
    console.log(filmesAnoUser)
}

filtrarfilmesPorAno(1994)

Aqui minha base de dados que salvei como estanteLivros.json

[{
    "id": 1,
    "titulo": "ET o Extraterrestre",
    "diretor": "Steven Spilberg" ,
    "anoLancamento": 1982
    
},
{
    "id": 2,
    "titulo": "O protetor",
    "diretor": "Antoine Fuqua" ,
    "anoLancamento": 2014

},
{
    "id": 3,
    "titulo": "Assassinos por Natureza",
    "diretor": "Oliver Stone" ,
    "anoLancamento": 1994
},
{
    "id": 5,
    "titulo": "O Máskara",
    "diretor": "Chuck Russell" ,
    "anoLancamento": 1994
},
{
    "id": 6,
    "titulo": "Rambo",
    "diretor": "Ted Kotcheff" ,
    "anoLancamento": 1985
},
{
    "id": 7,
    "titulo": "Blade Runner, o Caçador de Andróides",
    "diretor": "Ridley Scott" ,
    "anoLancamento": 1985
}
]
'''
1 resposta

Atualizando...

Encontrei um caminho que pode não ser o mais eficiente, mas aparentemente resolve a lógica. Vejam se concordam, e se tiver uma possiblidade mais inteligente, fiquem à vontade para contribuir.

Agora estou verificando o tamanho do array que filtra os filmes, caso ele seja zero, o que significa que nenhuma interação retornou o valor buscado, ele exibe a mensagem de que o filme não foi encontrado . Marquei a atualização com: **** atualizado à partir daqui ****

const listaFilmes = require("./estanteFilmes.json")

//const msgNotFound = "Filme não encontrado"
function filtrarfilmesPorAno(anoFilmeUser){
    const msgNotFound = "Filme não encontrado";
    const filmesFiltrados = listaFilmes.filter(filmes => {
        if(filmes.anoLancamento === anoFilmeUser){            
            return filmes;
        }
    })
    // **** atualizado à partir daqui **** //
    if (filmesFiltrados.length == 0){        
        return msgNotFound
    }
    else {
        return filmesFiltrados
    }
    
    }

const retornoFuncBuscaFilmes = filtrarfilmesPorAno(1920); // para testar o caso de não encontrar nenhuma incidência de filme
const retornoFuncBuscaFilmes = filtrarfilmesPorAno(1985); // para o caso de encontrar 2 filmes possíveis

console.log(retornoFuncBuscaFilmes)
console.log(retornoFuncBuscaFilmes2)