1
resposta

[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)

}
1 resposta

Oii Rafael, tudo bem?

No trecho do código, o find tá sendo utilizado para procurar um livro na biblioteca cujo id seja igual ao parâmetro id passado. O operador || (pipe duplo) serve para retornar null caso o find não encontre um livro correspondente. Dessa forma, se find retornar undefined (o que acontece quando nenhum item corresponde à condição), o || irá forçar o retorno de null ao invés de undefined.

Sua abordagem com o filter também tá correta, só é um pouco mais verbosa. O find simplifica porque retorna apenas o primeiro item encontrado que corresponde à condição, enquanto o filter retorna uma lista de todos os itens que atendem à condição. Para o caso de buscar apenas um item, find é mais apropriado.

Espero que isso tenha esclarecido!

Abraço!