2
respostas

Guardar array erros dentro de variável

Pessoal, dentro do código abaixo:

botao.addEventListener("click", function (event) {

    event.preventDefault(); // Limpando configurações padrão do botão;

    var erros = [];

    let paciente = obtemPacienteFormulario(form);

    var erro = validaPaciente(paciente);

    if (erro.length > 0) {

        console.log(erros);
        return;

    } else {

        let pacienteTr = document.createElement("tr");

        let tabelaPacientes = document.querySelector("#tabela-pacientes");

        tabelaPacientes.appendChild(pacienteTr);
        pacienteTr.appendChild(criaTd(paciente.nome,"info-nome"));
        pacienteTr.appendChild(criaTd(paciente.peso,"info-peso"));
        pacienteTr.appendChild(criaTd(paciente.altura,"info-altura"));
        pacienteTr.appendChild(criaTd(paciente.gordura,"info-gordura"));
        pacienteTr.appendChild(criaTd(paciente.imc,"info-imc"));

        form.reset();

    }

});

E o código da função validaPaciente é:

 function validaPaciente (paciente) {

     var erros = [];

     if(!validaPeso(paciente.peso)) {
         erros.push("Peso inválido!");
     }

     if(!validaAltura(paciente.altura)) {
         erros.push("Altura inválida");
     }

     if(paciente.altura.length == 0) {
         erros.push("Altura não pode ficar em branco.")
     }

     if(paciente.peso.length == 0) {
         erros.push("Peso não pode ficar em branco.")
     }

     if(paciente.nome.length == 0) {
         erros.push("Nome não pode ficar em branco.")
     }

     if(paciente.gordura.length == 0) {
         erros.push("Gordura não pode ficar em branco.")
     }

     console.log(erros);
     return erros;

 }

Na aula, o professor ensinou a guardarmos o array criado na função validaPaciente dentro da variável "erro" (var erro = validaPaciente(paciente)); Mas eu não entendi a necessidade de guardar isso dentro de uma variável. Pra simplificar, tentei simplesmente chamar a função validaPaciente, que automaticamente traria o array 'erros' no return no final da função. Com esse array retornado, eu colocaria dentro do if e se houve mais de um elemento no array, conseguiria vê-los através do console.log, mas não funcionou, o código aciona o else e adiciona uma linha sem qualquer conteúdo, ignorando o array de erros. Sabem por que isso acontece?

2 respostas

Ah, e eu tomei sim o cuidado de usar 'erros' (array no plural) ao invés de 'erro' no teste de condição. Mesmo assim não rolou.

Olá Leonardo, tudo bem com você?

Vou tentar te auxiliar, entretanto não tenho certeza se realmente compreendi o que você quis dizer, caso fique com alguma dúvida poderia tentar explicar novamente?

tentei simplesmente chamar a função validaPaciente, que automaticamente traria o array 'erros' no return no final da função. Ficou confuso, pois em seu código você esta fazendo igual ao professor:

    var erro = validaPaciente(paciente);

    if (erro.length > 0) {

        console.log(erros);
        return;

A única questão é que essa variável erros que você esta dando console.log será vazia sempre pois em nenhum momento adicionamos valor para ela, você apenas criou aqui:

    var erros = [];

E não há nenhuma atribuição para ela mudar de valor após isso, o conteúdo com os erros obtidos do formulário estão dentro de erro

Mas eu não entendi a necessidade de guardar isso dentro de uma variável.

Precisamos da variável para ter acesso a todos os erros, se não capturarmos o retorno de uma função não podemos fazer nada com ela, poderíamos por exemplo fazer:

if( validaPaciente(paciente).length > 0){

E dessa forma não armazenar em uma variável, entretanto, como não guardamos em lugar algum não há como saber quais foram os erros que o nosso formulário teve, por essa razão precisamos ter uma variável que capture essas informações

A nossa função irá sempre retornar apenas um array, ainda que o nome seja o mesmo (erros), não há essa substituição pois são variáveis totalmente diferentes para o javascript :)

Mas caso não foi isso que você quis dizer, estou à disposição :)

Abraços e Bons Estudos!