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

Dúvida no Ex. 5 da Aula 5 - Funções e os cidadãos de primeira classe

Galera, estou com a seguinte dúvida. Tenho 3 arquivos:

1º - calcula-imc.js

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

percorreArray (pacientes, function(trsPacientes){

    var imc = paciente.pegaImc();

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

    console.log(imc);
};

2º - monta-paciente.js

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("Nao Posso Dividir por Zero");
                        }
                    }
    }
    return paciente;
}

3º - percorre-arrays.js

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

        var pacienteTr = trsPacientes[posicaoAtual];

        comportamento(pacienteTr);
    };
};

No console aparece a seguinte mensagem de erro para a linha 27 "};" do calcula-imc.js

"Uncaught SyntaxError: missing ) after argument list"

No html estão chamados na seguinte ordem

    <script src="monta-paciente.js"></script>
    <script src="percorre-array.js"></script>
    <script src="calcula-imc.js"></script>
13 respostas

Jarom, Boa Tarde .

no arquivo monta-paciente.js faltou fechar a função };

verifica se esse problema , caso ocorrer outro poste no fórum.

Bom estudo

Celso, não encontrei a parte que tem que fechar a função, poderia copiar e colar a linha aqui, por favor? Obrigado!

Jarom no percorreArray, faltou fechar com ).

Está assim: percorreArray (pacientes, function(trsPacientes){

deve ficar assim: percorreArray (pacientes, function(trsPacientes)){

Jarom ,

falta tambémfechar o parenteses no percorre array como o hugo falou , um parentes no calcula-imc.js .

ja no arquivo monta-paciente , no ultima chave onde fecha a função está faltando um ;

tem que ser assim :

function montaPaciente (pacienteTr){

        // conteúdo da classe 

     }
    return paciente;
};

Espero ter ajudado

Galera, infelizmente não consegui, vou reenviar o conteúdo com as alterações e os novos erros que estão aparecendo.

1º - calcula-imc.js

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

percorreArray (pacientes, function(trsPacientes)){

    var imc = paciente.pegaImc();

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

    console.log(imc);
    };
};

2º - monta-paciente.js

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("Nao Posso Dividir por Zero");
                        }
                    }
    }
    }
    return paciente;
};

3º - percorre-array.js

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

        var pacienteTr = trsPacientes[posicaoAtual];

        comportamento(pacienteTr);
    };
};

Erros:

monta-paciente.js:21 - Uncaught SyntaxError: Illegal return statement

calcula-imc.js:3 - Uncaught SyntaxError: Unexpected token )

Jarom ,

o primeiro erro tem uma chave a mais no seu arquivo monta-paciente.js

ele está assim :

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("Nao Posso Dividir por Zero");
                        }
                    }
    }
    }
    return paciente;
};

quanto o certo seria :

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("Nao Posso Dividir por Zero");
                        }
                    }
    }
    return paciente;
    };

tenta arrumar esse , e veja se irá dar erro novamente .

Jarom, vou ter que te pedir desculpas, o segundo erro foi provocado por um erro meu, não percebi que a função era anônima.

Aquele novo parêntese que você colocou, deve vir no fim da função, após a chave de fechamento e antes do ponto e vírgula.

Tente assim:

percorreArray (pacientes, function(trsPacientes){

var imc = paciente.pegaImc();

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

console.log(imc); });

Com as alterações feitas continuo tendo erro:

Eis os códigos:

1º - calcula-imc.js

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

percorreArray (pacientes, function(trsPacientes){

    var imc = paciente.pegaImc();

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

    console.log(imc)});
};

2º - monta-pacientes.js

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("Nao Posso Dividir por Zero");
                        }
                    }
    }
    return paciente;
};

3º - percorre-array.js

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

        var pacienteTr = trsPacientes[posicaoAtual];

        comportamento(pacienteTr);
    };
};

E o erro que aparece agora é: calcula-imc.js :11 Uncaught SyntaxError: Unexpected token }

Na última linha do calcula-mcs,js parece ter um }; fantasma...Ele é de alguma parte do código que você não colocou? Se não for, retire ele e veja se o erro persiste.

Hugo Vallada, se eu retiro esse }, passo a ter o seguinte erro:

calcula-imc.js:3 Uncaught ReferenceError: pacientes is not defined

solução!

Olá Jarom! Veja bem, vou utilizar os últimos códigos mandados por você para te ajudar.

Os erros de seu código estão no seu calcula-imc.js.

Primeiro, é necessário retirar a ultimo chave e o ponto e virgula, pois não deveria ser assim:

// restante do código

console.log(imc)});
};

Mas sim assim:

console.log(imc)});

Então se você tentar utilizar o código no seu browser verá o erro:

Uncaught ReferenceError: pacientes is not defined

Isso está ocorrendo porque você está tentando utilizar a variável paciente sem ela existir em su código, perceba que você em nenhum momento declarou essa variável.

A sua utilização da função percorreArray também está incorreta, perceba que você está passando como argumento uma variável pacientes que também não existe e como argumento da função anônima passada você está passando a array trsPacientes, que também está errado:

percorreArray (pacientes, function(trsPacientes){

// Restante do código

Veja bem, a função percorreArray, por você criada, recebe como 1º argumento um Array com as tags <tr> que possuem class = "paciente" . Então, essa array é percorrida e cada tag <tr> da Array é pega e atribuída a variável pacienteTr e é aplicado um comportamento passando essa variável como argumento. Esse comportamento é a função anônima que você declarou anteriormente em seu calcula-imc.

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

        var pacienteTr = trsPacientes[posicaoAtual];

        comportamento(pacienteTr);
    };
};

Então em seu calcula-imc, para chamar a função percorreArray o correto seria:

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

percorreArray (trsPacientes, function(pacienteTr){

// restante do código

Então, na função anônima, você põe o código que será executado com a variável pacienteTr que possui como valor atribuído uma tag <tr>.

O que esse código deve fazer?

Ele deve montar o paciente através da função montaPaciente(), calcular o Imc desse paciente chamando a função pegaImc() colocada como uma função do paciente e atribuir esse valor a tag <td> referente ao IMC.

Então montamos o paciente a partir da variável pacienteTr e atribuímos o paciente a uma variável da seguinte forma:

var paciente = montaPaciente(pacienteTr)

Depois calculamos seu IMC atribuindo a uma variável:

var imc = paciente.pegaImc();

Então pegamos a tag <td> que é o campo onde queremos mostrar o IMC do nosso paciente e atribuímos a uma variável:

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

Então colocamos como conteúdo dessa tag o valor do imc do paciente:

trImc.textContent = imc;

E se for do seu desejo, também podemos colocar para esse valor ser mostrado no console do browser:

console.log(imc);

Assim seu calcula-imc irá funcionar perfeitamente, ficando ele de seguinte forma:

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

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

Enfim, espero ter ajudado. Bons estudos!

Romário, show de bola. Muito obrigado!

Só uma pequena correção:

Você colocou "trImc.textContent = imc;" e o certo é "tdImc.textContent = imc;"

Mas de resto deu certinho.

Valeeeu

Ah verdade! me atrapalhei kkkkkk. Mas que bom que você entendeu e conseguiu.

Bons Estudos!