Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Resolução

const curso = {
  titulo: "JavaScript Intermediário",
  estudantes: [
    { nome: "Ana", progresso: 85 },
    { nome: "Carlos", progresso: 40 },
    { nome: "Juliana", progresso: 72 },
    { nome: "Pedro", progresso: 60 }
  ],
};

curso.gerarRelatorio = function gerarRelatorio() {
  let somaProgresso = 0; 
  for (let i in this.estudantes) {
    let aluno = this.estudantes[i]; 
    somaProgresso += aluno.progresso;
    aluno.progresso > 70 ?
      console.log(`Nome: ${aluno.nome} | Progresso: ${aluno.progresso}% | Aprovado`) :
      console.log(`Nome: ${aluno.nome} | Progresso: ${aluno.progresso}% | Em Progresso`);
  }

  const media = (somaProgresso / this.estudantes.length).toFixed(2);
  console.log(`Total de estudantes: ${this.estudantes.length}`);
  console.log(`Média geral da turma: ${media}%`);
}

curso.gerarRelatorio();
1 resposta
solução!

Oii João Vítor,

Mandou bem demais na resolução! A lógica de cálculo da média e o uso do this para acessar os dados internos do objeto estão certinhos.

Gostaria de trazer dois pontos de atenção para polir ainda mais o seu código:

1. O laço de repetição (Loop)
Você utilizou o for...in. Embora ele funcione, em JavaScript ele é projetado tecnicamente para percorrer chaves (propriedades) de um objeto. Quando lidamos com arrays (listas), a boa prática é usar o for...of.
Ele acessa diretamente o valor (o objeto aluno), eliminando a necessidade de criar a variável let aluno = this.estudantes[i]. O código fica mais limpo.

2. O Operador relacional
O enunciado pede aprovação para nota "igual ou maior que 70". No seu código está > 70.
Isso cria um edge case (caso de borda): se um aluno tirar exatamente 70, seu código o colocaria "Em Progresso", quando ele deveria estar "Aprovado". O correto seria >= 70.

Veja como ficaria com esses ajustes:

curso.gerarRelatorio = function() {
  let somaProgresso = 0;
  
  // usando for...of (mais direto para arrays)
  for (let aluno of this.estudantes) {
    somaProgresso += aluno.progresso;
    
    // ajuste para >= (maior OU igual)
    const status = aluno.progresso >= 70 ? "Aprovado" : "Em Progresso";
    
    console.log(`Nome: ${aluno.nome} | Progresso: ${aluno.progresso}% | ${status}`);
  }

  const media = (somaProgresso / this.estudantes.length).toFixed(2);
  console.log(`Total de estudantes: ${this.estudantes.length}`);
  console.log(`Média geral da turma: ${media}%`);
}

Essa linha de adicionar a função ao objeto depois de criado (curso.gerarRelatorio = ...) é totalmente válida e mostra que você entende como o JavaScript trata funções como valores.

Continue assim.

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