3
respostas

Ex - 05

Confesso que esse exercício bagunçou meu cérebro, rs. Eu achei que eu tivesse fixado o conceito dos métodos de array até me deparar essa questão.

No fim das contas eu tava fazendo algo como:

const funcionarioEncontrado =  departamento.funcionarios.find((objetoFuncionario) => {
            if (id === objetoFuncionario.id) {
                return objetoFuncionario;
            }
}

Afinal, nas minhas anotações eu tinha anotado/compreendido que o .find( ) retorna 'o primeiro elemento do array' que satisfazer a condição definida na função de callback.

3 respostas

Oi Rosemberg! Como vai?

O método .find() realmente retorna o primeiro elemento do array que satisfaz a condição definida na função de callback. No seu caso, você está tentando encontrar um funcionário dentro de um departamento específico.

O que você precisa fazer é garantir que a função de callback retorne um valor booleano, ou seja, true ou false, para que o .find() saiba quando encontrou o elemento desejado. No seu exemplo, você está retornando o próprio objetoFuncionario, mas o correto seria retornar true quando o id do funcionário for igual ao id que você está procurando.

Aqui está uma sugestão de como você pode ajustar seu código:

const funcionarioEncontrado = departamento.funcionarios.find((objetoFuncionario) => {
    return id === objetoFuncionario.id;
});

Com essa modificação, o .find() irá retornar o primeiro funcionário cujo id corresponde ao id que você está procurando. Se nenhum funcionário for encontrado, funcionarioEncontrado será undefined.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Maravilha, Armando! E obrigado pelo retorno!

Mas agora, a dúvida que fica na minha cabeça é:

Quando é que a minha função de callback vai precisar retornar um booleano? Em quais os casos? Há alguma regra definida? Do contrário vai continuar muito abstrato na minha cabeça, desculpa!

Oi, Rosemberg!

Sobre sua última dúvida: quando a função de callback precisa retornar um booleano, pense assim — sempre que você estiver usando métodos que fazem testes ou filtros (como .find(), .filter(), .some(), .every()), a função de callback deve retornar true ou false.

Esses métodos percorrem os elementos do array e testam cada um com base no retorno booleano da função. Veja:


// Retorna o primeiro funcionário com id igual ao buscado
const funcionarioEncontrado = funcionarios.find(func => func.id === id);

Neste caso, a expressão func.id === id já retorna um booleano, que é o que .find() precisa.

Agora compare com outros cenários:


// Retorna todos os funcionários do departamento de "TI"
const funcionariosTI = funcionarios.filter(func => func.departamento === "TI");

// Verifica se existe algum funcionário com salário acima de 10 mil
const temSalarioAlto = funcionarios.some(func => func.salario > 10000);

// Verifica se todos os funcionários são ativos
const todosAtivos = funcionarios.every(func => func.ativo === true);

Ou seja, a regra é: se o método espera testar elementos para decidir algo, o retorno da função de callback precisa ser um booleano.

Fico à disposição. Abraços e bons estudos!