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

Não consigo achar o erro

A terceira parte simplesmente nao funciona, o botao de segunda chamada e não consigo ver onde estou errando

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="css/css_geral.css">
    <title>Document</title>
</head>
<body>
    <h1>Programa Concurso</h1>
    <p>Nome: 
        <input type="text" id="inNome">
    </p>
    <p>N° acertos
        <input type="text" id="inAcertos">
        <input type="button" value="Adicionar" id="btAdicionar" >
    </p>
    <p>
        <input type="button" value="Listar todos" id="btListar">
        <input type="button" value="Aprovados 2° chamada" id="btAprovados">
    </p>
    <pre id="outLista">
    </pre>
    <script src="js/exerc5_3.js"></script>
</body>
</html>
var candidatos = [];

function adiciona(){
    var inNome = document.getElementById("inNome");
    var inAcertos = document.getElementById("inAcertos");
    var nome = inNome.value;
    var acertos = Number(inAcertos.value);

    if(nome == "" || acertos == 0 || isNaN(acertos)){
        alert("Preencha os campos corretamente")
        inNome.focus();
        return;
    }

    candidatos.push({nome: nome, acertos: acertos})

    inNome.value = "";
    inAcertos.value = "";
    inNome.focus();

    listarCandidatos();
}

var btAdicionar = document.getElementById("btAdicionar");
btAdicionar.addEventListener("click", adiciona);

function listarCandidatos(){
    var lista = "";

    for(var i = 0; i < candidatos.length; i++){

        lista += candidatos[i].nome + " - " + candidatos[i].acertos + " acertos" + "\n"
    }

    document.getElementById("outLista").textContent = lista;
}

var btListar = document.getElementById("btListar");
btListar.addEventListener("click", listarCandidatos);

let copia = candidatos.slice();
copia.sort( function(a, b){
    return a.acertos - b.acertos
})

function aprovadosSegunda(){
    var lista = "";
    for(var i = 0; i < copia.length; i++){

        if(copia[i].acertos >= 30){
            lista += copia[i].nome + " - " + copia[i].acertos + " acertos" + "\n"
        }
    }
    document.getElementById("outLista").textContent = lista;
}
var btAprovados = document.getElementById("btAprovados");
btAprovados.addEventListener("click", aprovadosSegunda);

/* Ordenar o vetor para crescente
para ordenar descrescente so colocar um REVERSE no vetor(copia);
var teste = [1, 6, 2, 7, 3, 14, 5]
var listateste = "";

let copia = teste.slice();
copia.sort( function (a, b) {
    return a - b;
});
for(var i = 0; i < copia.length; i++){
    listateste += copia[i] + ",";
}

console.log(listateste); */
1 resposta
solução!

Olá Vittor Luca. O erro está no seguinte trecho:

let copia = candidatos.slice();
copia.sort( function(a, b){
    return a.acertos - b.acertos
})

Não há nada de errado nele em sí, mas você deveria colocar ele dentro da função aprovadosSegunda, para que ele fosse executado toda vez que a função fosse chamada. Pois toda vez que e pagina é carregada, o codigo Js é executado uma unica vez. Sendo assim, esse trecho, já que etsá fora da função, ele também é executado só uma vez. E dessa forma, a variável copia vai receber o valor de candidatos apenas no momento inicial em que o codigo é rodado, e seu valor será sempre vazio, e nunca retornará nada. Mas se você inseri-lo dentro da função, toda vez que o botão for apertado e a função for chamada, a variavel copia vai sempre receber o valor mais recente do array candidatos.

Espero que entenda minha explicação