Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Funções e os cidadãos de primeira classe

No arquivo calcula-imc.js tenho o seguinte código:


var trsPacientes  = document.getElementsByClassName("paciente");  //Array de trs

percorreArray(trsPacientes, function(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,
                         pegaImc : function(){
                             if (this.altura > 0) {

                            var imc = this.peso / (this.altura * this.altura);
                            return imc;

                            } else{
                                console.log("Não foi possível realizar o cálculo");
                            }
                         }};

    var imc = pacienteAtual.pegaImc();

    pacienteTr.getElementsByClassName("info-imc")[0].textContent = imc;

    console.log(imc);
});

E não consegui enxergar como montar a function montaPaciente. Gostaria da ajuda dos colegas

2 respostas

Tente se perguntar:

  • O que eu preciso para montar um paciente?
  • De onde virão esses dados?
  • Onde deverei guardá-los?
solução

Nesse caso ficaria da seguinte forma:

var trsPacientes = document.getElementsByClassName("paciente"); //Array de trs
percorreArray(trsPacientes, montaPaciente);

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,
                              pegaImc : function(){
                                  if (this.altura > 0) {
                                     var imc = this.peso / (this.altura * this.altura);
                                     return imc;
                                  } else{
                                     console.log("Não foi possível realizar o cálculo");
                                  }
                              }
                          };

        var imc = pacienteAtual.pegaImc();
    var tdImc = pacientesTr.getElementsByClassName("info-imc")[0];
    tdImc.textContent = imc;
    console.log(imc);
};

E dentro do arquivo que contém essa função que você criou ficaria da seguinte forma:

function pecorreArray(trPacientes, comportamento){
    for (var posicaoAtual = 0; posicaoAtual <= trPacientes.length - 1; posicaoAtual++){
        var pacienteTrAtual = trPacientes[posicaoAtual];

        comportamento(pacienteTrAtual);
    }
};

Rode e ver se dá certo. Para montar um paciente em uma função era só você extrair todo seu codigo que fazia a montagem do objeto paciente para dentro de uma função, e chama-la quando fosse pecorrer no for.