Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Dúvida sobre o código.

Olá a todos. Está correta a forma como eu escrevi o código? Algum acerto a fazer?


function montaPaciente (pacienteTr) {

    var tdNome = pacienteTr.getElementsByClassName("info-nome")[0];
    var tdPeso = pacienteTr.getElementsByClassName("info-peso")[0];
    var tdAltura = pacienteTr.getElementsByClassName("info-altura")[0];

    var pacienteAtual = {   nome : tdNome.textContent, 
                            peso : tdPeso.textContent,
                            altura : tdAltura.textContent,
                            calcImc : function() {
                                if(this.altura != 0){
                                    var imc = this.peso / ( this.altura * this.altura);    
                                } else {
                                    imc = "Insira uma altura mínima!";
                                }
                                return imc;
                            },

                            calcDiag : function() {
                                if(imc < 20.7) {
                                    textoDiag  = "Paciente muito magro!";   
                                } 
                                if(imc >= 20.7 && imc <= 26.4) {
                                    textoDiag  = "Paciente com peso normal!";    
                                }
                                if(imc > 26.4 && imc <= 32.3) {
                                    textoDiag  = "Paciente acima do peso!";    
                                }
                                if(imc > 32.3) {
                                    textoDiag  = "Paciente obeso!";   
                                } 
                                return textoDiag; 
                            }
                        }; 
    return pacienteAtual;
};                        

var trPacientes = document.getElementsByClassName("paciente");

for (var posicaoAtual = 0; posicaoAtual <= trPacientes.length - 1; posicaoAtual++) {

    var pacienteTr = trPacientes[posicaoAtual];
    var pacienteAtual = montaPaciente(pacienteTr);

    var imc = pacienteAtual.calcImc();
    var textoDiag = pacienteAtual.calcDiag(); 

    var tdImc = pacienteTr.getElementsByClassName("info-imc")[0];
    var tdDiag = pacienteTr.getElementsByClassName("info-diag")[0];

    tdImc.textContent = imc;
    tdDiag.textContent = textoDiag; 

};
6 respostas

Oi Rodrigo, olhando assim de relance, sem me prender aos detalhes é isso sim o esperado pelo exercício.

A função monstaPaciente recebe a tr que contém dos dados de um paciente. Nela, você cria um objeto JavaScript com base nos valores da td que você recebeu, inclusive adiciona alguns métodos nesse objeto. No final, a função devolve esse objeto.

Tudo bem Rodrigo?

Obrigado, Flávio. Não tenho muita experiência em programação, estou tentando fazer e refazer os exercícios sem precisar olhar para o gabarito. Acho que com o tempo eu vou melhorando. Obrigado pela ajuda.

Meu amigo, se você fez esse código sem olhar o gabarito, você está de parabéns. Já vi muitos alunos aqui terem dificuldade nesse exercício e você foi muito bem.

Continue estudando assim! Eu só mudaria de:

for (var posicaoAtual = 0; posicaoAtual <= trPacientes.length - 1; posicaoAtual++) {

para

for (var posicaoAtual = 0; posicaoAtual < trPacientes.length ; posicaoAtual++) {

Assim você não precisa colocar aquele -1 que esteticamente fica "feio". Só isso mesmo.

Sucesso e bom estudo!

solução!

Bom, sem querer mexer muito no seu código, até porque você está aprendendo, eu indentaria ele um pouco diferente e evitaria declarar algumas variáveis no final. Ele ficaria assim:

function montaPaciente (pacienteTr) {

    var tdNome = pacienteTr.getElementsByClassName("info-nome")[0];
    var tdPeso = pacienteTr.getElementsByClassName("info-peso")[0];
    var tdAltura = pacienteTr.getElementsByClassName("info-altura")[0];

    var pacienteAtual = {   

        nome : tdNome.textContent, 
        peso : tdPeso.textContent,
        altura : tdAltura.textContent,
        calcImc : function() {

            if(this.altura != 0){
                var imc = this.peso / ( this.altura * this.altura);    
            } else {
                imc = "Insira uma altura mínima!";
            }
            return imc;
        },

        calcDiag : function() {
            if(imc < 20.7) {
                textoDiag  = "Paciente muito magro!";   
            } 
            if(imc >= 20.7 && imc <= 26.4) {
                textoDiag  = "Paciente com peso normal!";    
            }
            if(imc > 26.4 && imc <= 32.3) {
                textoDiag  = "Paciente acima do peso!";    
            }
            if(imc > 32.3) {
                textoDiag  = "Paciente obeso!";   
            } 
            return textoDiag; 
        }
    }; 
    return pacienteAtual;
};                        

var trPacientes = document.getElementsByClassName("paciente");

for (var posicaoAtual = 0; posicaoAtual <= trPacientes.length; posicaoAtual++) {

    var pacienteTr = trPacientes[posicaoAtual];
    var pacienteAtual = montaPaciente(pacienteTr);

    pacienteTr.getElementsByClassName("info-imc")[0] = pacienteAtual.calcImc();
    pacienteTr.getElementsByClassName("info-diag")[0] = pacienteAtual.calcDiag();

};

Pouca coisa que mudei, é mais na estética do código. Tudo certo?

Obrigado, Flavio. Ótimas dicas. :)