Oi Fernando, desculpa a demora. Acho que você começou bem sim. Pro IMC, você pode usar o que o objeto já tem, ou seja, suas propriedades. Veja como poderia ser feito:
var pacienteZ = {
nome: selecionaTdContent('.info-nome'),
peso: selecionaTdContent('.info-peso'),
altura: selecionaTdContent('.info-altura'),
gordura: selecionaTdContent('.info-gordura'),
imc: (this.peso / (this.altura * this.altura)).toFixed(2)
};
O this, neste caso se refere ao próprio objeto, então você pode usar isso. O cálculo é feito diretamente. Porém, você pode precisar desse IMC em algum outro lugar. Então você pode simplesmente chamar a função mesmo.
var pacienteZ = {
nome: selecionaTdContent('.info-nome'),
peso: selecionaTdContent('.info-peso'),
altura: selecionaTdContent('.info-altura'),
gordura: selecionaTdContent('.info-gordura'),
imc: calculaIMC(this.peso, this.altura)
};
O problema agora no seu código atual é: você tem uma declaração de função dentro de um laço. Isso não é bom, a função está sendo redefinida e chamada a cada redefinição a cada iteração do laço. Como você poderia resolver isso?
Pense um pouco, depois eu volto pra gente continuar a evoluir isso.
Dicas:
- O ideal é que o laço execute a função várias vezes sem ser redefinida.
- E se você criasse uma função que recebe o TR paciente e retornasse o objeto já criado. Não seria melhor? Como poderia resolver isso? - Observe que se fizer isso, no laço você precisaria executar apenas duas funções, uma que seleciona a tr paciente, e outra que cria o objeto paciente.