4
respostas

Valor do IMC não aparece na tabela após alterações referentes ao desafio

Olá! Fiz as alterações no arquivo calcula-imc.js, conforme as atividades 11 e 12, o qual ficou assim:

// calcula-imc.js

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

function percorreArray(trsPacientes, function(pacienteTr) {
    var pacienteAtual = montaPaciente(pacienteTr);
    var imc = pacienteAtual.pegaImc();
    var tdImc = pacienteTr.getElementsByClassName("info-imc")[0];
tdImc.textContent = imc;
    console.log(imc);
}
);

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 paciente = {
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 é possível realizar divisão por 0");
        }
    }
};
    return paciente;
}

No entanto, não está mais aparecendo o valor do imc na tabela. O que poderá estar ocorrendo. Será que "marquei touca" na codificação? Só coloquei o arquivo calcula-imc.js, pois foi o único que foi alterado após a atividade 12. Um abraço!

4 respostas

Quem ta chamando a função percorreArray? Tem certeza que ta passando o argumento que representa as linhas?

Olá! Exceto pelo fato de inserir a função anônima como um dos argumentos da chamada à função percorreArray, segui exatamente como descrito na atividade 12. Isto é, a função percorreArray com os argumentos trsPacientes e a função anônima, em cujo corpo, é feita a chamada para a função montaPacientes. Na minha humilde opinião, está tudo certo! O que acha que errei? Um abraço!

Não sei.. por isso que perguntei sobre a chamada da função percorreArray. Onde ela está? No seu código só está a declaração..

Boa noite,

Desculpa estar me intrometendo no meio da conversa de vocês, mas analisando o problema em questão e revendo o histórico do exercício creio que o calcula-imc.js não deveria possuir a função percorreArray, ( Cuidado com o nome, se em algum momento você fizer o download do projeto que está disponível a função estará com o nome de precorreArray), essa função deve estar em outro arquivo agora, chamado percorreArray (ou precorreArray), conforme abaixo:

function precorreArray(trsPacientes, comportamento) {

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

        var pacienteTrAtual = trsPacientes[posicaoAtual];
        comportamento(pacienteTrAtual);
    }
}

Assumindo que você já tenha feito esse arquivo fica mais fácil de analisar o seu código. A primeira coisa que eu fiz foi retirar o function do começo da percorreArray (também tive que mudar para precorreArray), mais abaixo logo após o console.log(imc) eu retirei os }); e comecei a ajustar a indentação, para agora a função monta paciente fazer parte do corpo da função que está sendo passada para o percorreArray, e no fim adicionei o trecho retirado acima });

No fim o código ficou assim:

// lembre-se é precorreArray ou percorreArray
var trsPacientes = document.getElementsByClassName("paciente");

precorreArray(trsPacientes, function(pacienteTr) {
    var pacienteAtual = montaPaciente(pacienteTr);
    var imc = pacienteAtual.pegaImc();
    var tdImc = pacienteTr.getElementsByClassName("info-imc")[0];
    tdImc.textContent = imc;
    console.log(imc);


    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 paciente = {
            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 é possível realizar divisão por 0");
                }
            }
        };
        return paciente;
    }
});

Espero ter ajudado.