1
resposta

[Resposta]

const curso = {
  titulo: "JavaScript Intermediário",
  estudantes: [
    { nome: "Ana", progresso: 85 },
    { nome: "Carlos", progresso: 40 },
    { nome: "Juliana", progresso: 72 },
    { nome: "Pedro", progresso: 60 },
  ],
  gerarRelatorio() {
    const situacaoAprovado = "Aprovado";
    const situacaoPendente = "Em andamento";

    this.estudantes.forEach(({ nome, progresso }) => {
      const status = progresso > 70 ? situacaoAprovado : situacaoPendente;
      console.log(
        `Estudante: ${nome} | Progresso: ${progresso}% | Situação: ${status}`,
      );
    });

    const numeroEstudantes = this.estudantes.length;    

    const soma = this.estudantes.reduce(
      (total, estudante) => total + estudante.progresso,
      0,
    );
    const mediaPercentual = numeroEstudantes > 0 ? soma / numeroEstudantes : 0;
    
    console.log(`Total de estudantes: ${numeroEstudantes}`);
    console.log(`Média geral da turma: ${mediaPercentual.toFixed(2)}%`);
  },
};

curso.gerarRelatorio();
1 resposta

Oii! Tudo bem?

Obrigada por compartilhar.

Você utilizou o forEach para a exibição dos dados e o reduce para o cálculo da soma dos progressos. Essa escolha deixa o código com uma característica mais declarativa, focando no que deve ser feito com os dados.

  • Uso do reduce: É uma das formas mais limpas de acumular valores em uma lista, evitando a criação de variáveis de controle externas (como um let soma = 0 fora de um laço).
  • Ao usar ({ nome, progresso }) no forEach, você acessa as propriedades diretamente, o que torna a leitura mais fluida.
  • A verificação numeroEstudantes > 0 antes de calcular a média é um cuidado excelente para evitar erros matemáticos caso a lista estivesse vazia.

Uma pequena observação:
Notei que na sua lógica de decisão para o status, você utilizou:
const status = progresso > 70 ? situacaoAprovado : situacaoPendente;

De acordo com o enunciado, o estudante deve ser considerado "Aprovado" se o progresso for igual ou maior que 70. No seu código, um aluno com exatamente 70 ficaria com o status "Em andamento". Para ajustar, basta mudar o operador para >=.

Continue explorando esses métodos de array. Eles ajudam muito a escrever códigos mais concisos e fáceis de dar manutenção.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!