0
respostas

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

Oi pessoal, tudo bem? Gostaria de uma ajuda para compreender a construção do find que foi colocada como sugestão de solução.

O que exatamente o find está fazendo no trecho em que considera o pipe duplo? Me parece que ele está operando como se fosse uma condicional, mas ao mesmo tempo não faz muito sentido visto que não tem um "if" associado à essa condição. Tentei seguir por esse caminho fazendo uma linha de "if" validando se o "livro.id" é ogual ao "id", e como else coloquei para que o livro.id == null, mas não deu certo.

function encontrarLivroPorId(id) {
    return biblioteca.find(livro => livro.id === id) || null;
}

Como contorno eu fiz uma uma outra maneira usando filter, mais verbosa, mas que acho que funciona. Nese caso, eu valido se o tamanho do array que irá alimentar os "id" encontrados, é zero. E em caso afirmativo, o que significa que o id não foi encontrado, ele retorna uma mensagem de erro informando que o livro não foi encontrado.

Fica como sugestão:

//passo o json com os cadastramentos de livros
const estanteLivros = require('./estanteLivros.json')


//crio uma mensagem de erro padrão
const mensagemErro = 'livro não encontrado'

//crio a função de encontrar livro por ID
function encontrarLivroporId(idlivro){
    //uso o filter para filtrar um livro que possui o "id" passado para a função
    
    const listaLivros = estanteLivros.filter(livros => {
        //caso o id do livro esteja na lista de livros, retorna o objeto livro
        if(livros.id === idlivro){
            return livros}

    })
        //verifica se o tamanhp do listalivros do filter é zero. o que indica que o id do livro
        //não existe na lista de livro. caso afirmativo, retorna a mensagem de livro não encontrado 
        //padrão
        if(listaLivros.length == 0){
            return console.log(mensagemErro)
        }
//exibe o conteúdo do lista livros.
    console.log(listaLivros)

}