2
respostas

Cálculo de IMC retornando NaN

Sei que já houve uma postagem sobre isso, mas a própria pessoa que postou disse que resolveu e acabou ficando sem uma explicação clara sobre o como isso foi feito. O cálculo de IMC de qualquer paciente novo inserido na lista retorna como NaN, apesar de eu ter definido a variável imc como 0 (logo, um número). O que fazer?

Arquivo calcula-imc.js:

let titulo = document.querySelector(".titulo")

titulo.textContent = 'Aparecida Nutricionista'

let pacientes = document.querySelectorAll('.paciente')

for (let i = 0; i < pacientes.length; i++) {

    let paciente = pacientes[i]

    let tdPeso = paciente.querySelector('.info-peso')
    let peso = tdPeso.textContent

    let tdAltura = paciente.querySelector('.info-altura')
    let altura = tdAltura.textContent

    let tdImc = paciente.querySelector('.info-imc')

    let pesoEhValido = true
    let alturaEhValida = true

    if (peso <= 0 || peso >= 1000) {
        console.log('Peso inválido')
        pesoEhValido = false
        tdImc.textContent = 'Peso Inválido!'
        paciente.classList.add('paciente-invalido')
    }

    if (altura <= 0 || altura >= 3.00) {
        console.log('Altura inválida')
        alturaEhValida = false
        tdImc.textContent = 'Altura Inválida!'
        paciente.classList.add('paciente-invalido')
    }

    if (alturaEhValida && pesoEhValido) {
        let imc = calculaImc(peso, altura)
        tdImc.textContent = imc
    }
}

function calculaImc(peso, altura) {
    let imc = 0

    imc = peso / (altura * altura)

    return imc.toFixed(2)
}

Arquivo form.js:

let botaoAdicionar = document.querySelector('#adicionar-paciente')
botaoAdicionar.addEventListener('click', function (event) {
    event.preventDefault();

    let form = document.querySelector('#form-adiciona')

    //Extraindo informações do paciente do form
    let paciente = obtemPacienteDoFormulario(form)
    console.log(paciente)

    //Cria a tr e a td do paciente
    let pacienteTr = montaTr(paciente)

    //Adicionando o paciente na tabela
    let tabela = document.querySelector('#tabela-pacientes')
    tabela.appendChild(pacienteTr)

    console.log(pacienteTr)
})

function obtemPacienteDoFormulario(form) {

    let paciente = {
        nome: form.nome.value,
        peso: form.peso.value,
        altura: form.altura.value,
        gordura: form.gordura.value,
        imc: calculaImc(form.peso.value, form.altura.value)
    }
    return paciente
}

function montaTr(paciente) {

    let pacienteTr = document.createElement('tr')

    let nomeTd = document.createElement('td')
    let pesoTd = document.createElement('td')
    let alturaTd = document.createElement('td')
    let gorduraTd = document.createElement('td')
    let imcTd = document.createElement('td')

    nomeTd.textContent = paciente.nome
    pesoTd.textContent = paciente.peso
    alturaTd.textContent = paciente.altura
    gorduraTd.textContent = paciente.gordura
    imcTd.textContent = calculaImc(peso, altura)

    pacienteTr.appendChild(nomeTd)
    pacienteTr.appendChild(pesoTd)
    pacienteTr.appendChild(alturaTd)
    pacienteTr.appendChild(gorduraTd)
    pacienteTr.appendChild(imcTd)

    return pacienteTr
}
2 respostas

Apesar de o que foi feito na aula não me permitiu consertar, algo que fiz depois acabou corrigindo o erro.

Boa tarde! Estava com o mesmo erro, mas vi que era culpa da virgula na altura, tem que o usar ponto, nao sei se esse é o seu problema mas foi assim que concertei o meu.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software