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

Dúvida no Ex. 4 da Aula 4 - Coleções e loops

Olá

Vou postar meu código para facilitar o entendimento:

//calcula-imc.js
function imc () 
{
    var pacientes = document.getElementsByClassName ("paciente"); //Selecionando as TR's com class = "paciente"
    var Dados = [];
    for (var contador=0; contador < pacientes.length; contador++)
    {
        var PacienteAtual = pacientes[contador];
        var Nome = PacienteAtual.getElementsByClassName("info-nome")[0].textContent;
        var Peso = PacienteAtual.getElementsByClassName("info-peso")[0].textContent;
        var Altura = PacienteAtual.getElementsByClassName("info-altura")[0].textContent;

        if(Altura != 0)
        {
            var imc = Peso / (Altura * Altura);
            PacienteAtual.getElementsByClassName("info-imc")[0].textContent = Math.round (imc);
        } else {
            console.log("Não posso executar uma divisão por 0!");
        };

        var paciente = {"Nome" : Nome, "Peso" : Peso, "Altura" : Altura, "IMC" : imc};
        Dados [contador] = paciente;
    };
    console.log (Dados);
};

Estou com duas dúvidas (Uma com relação ao código em si e outra com relação à situação). São elas:

  1. Como posso acessar esses dados depois? Digamos que futuramente eu queira acessar os dados do Leonardo, eu terei que buscar no index.html de novo o TR dele? Até tentei colocar um array ("Dados" é o nome dele, mas não sei se usei corretamente) onde eu conseguisse salvar os dados de todos os pacientes, mas não consegui.

  2. Por que preciso colocar o "[0]" neste trecho de código?

    var PacienteAtual = pacientes[contador];
    var Nome = PacienteAtual.getElementsByClassName("info-nome")[0].textContent;
    var Peso = PacienteAtual.getElementsByClassName("info-peso")[0].textContent;
    var Altura = PacienteAtual.getElementsByClassName("info-altura")[0].textContent;
2 respostas

Olá Guilherme! Respondendo suas perguntas:

1 - Você pode utilizar sim o Array que você criou. No entanto, você terá que percorrer a array e selecionar o paciente que você deseja dentro dela. Você pode isolar isso em uma função e passar como parâmetro algum atributo do paciente, o nome por exemplo, e dentro da funcao você percorre a array, dentro do loop você põe um if () pra caso o paciente tenha tal nome ele seja devolvido.

2 - Você precisa por o [0] porque veja que você esta trabalhando com arrays. A função getElementsByClassName retorna um Array com todos os elementos encontrados. Porem como você sabe que so tem 1 elemento entao esse é o primeiro, logo esta na posicao [0].

Espero ter ajudado! Bons Estudos!

solução!

Olá Guilherme

Eu consegui fazer funcionar o seu array Dados[]. Porém não sei se era esse o resultado que você estava atrás. Eu consegui adicionar os dois pacientes no array e acessar todos os pacientes já cadastrados. Segue abaixo o código modificado a partir do seu.

//calcula-imc.js var teste = function imc() { var pacientes = document.getElementsByClassName("paciente"); //Selecionando as TR's com class = "paciente" var Dados = []; for (var contador=0; contador <= pacientes.length - 1; contador++) { var PacienteAtual = pacientes[contador]; var Nome = PacienteAtual.getElementsByClassName("info-nome")[0]; var Peso = PacienteAtual.getElementsByClassName("info-peso")[0]; var Altura = PacienteAtual.getElementsByClassName("info-altura")[0]; var IMC = PacienteAtual.getElementsByClassName("info-imc")[0];

var paciente = { Nome : Nome.textContent, Peso : Peso.textContent, Altura : Altura.textContent, IMC : IMC.textContent }

if(paciente.Altura != 0) { var imc = paciente.Peso / (paciente.Altura * paciente.Altura); IMC.textContent = Math.round (imc); //console.log(imc);

} else { console.log("Não posso executar uma divisão por 0!"); }

//Como estava calculando IMC tive que re-selecionar o mesmo paciente do FOR para que a informação do IMC tivesse no IMC. var PacienteAtual = pacientes[contador]; var NomeDoPacienteComIMCCalculado = PacienteAtual.getElementsByClassName("info-nome")[0]; var PesoDoPacienteComIMCCalculado = PacienteAtual.getElementsByClassName("info-peso")[0]; var AlturaDoPacienteComIMCCalculado = PacienteAtual.getElementsByClassName("info-altura")[0]; var IMCDoPacienteComIMCCalculado = PacienteAtual.getElementsByClassName("info-imc")[0];

var pacienteComIMCCalculado = { Nome : NomeDoPacienteComIMCCalculado.textContent, Peso : PesoDoPacienteComIMCCalculado.textContent, Altura : AlturaDoPacienteComIMCCalculado.textContent, IMC : IMCDoPacienteComIMCCalculado.textContent }

//Método Push ele adiciona um objeto ou um valor no seu array. Dados.push(pacienteComIMCCalculado); console.log(Dados[contador]); } };

teste();

Espero ter ajudado de alguma forma. Abraço.