Function discovers greater value among JavaScript variables

3

I have the following form:

<body> 
    <form name="questao1" method="post" onsubmit="sendToDB();"> 
        <br><input type="checkbox" name="Q1[]" value="Enfermagem" onclick="getPontos(1)"> Garantir a saúde das pessoas 
        <br><input type="checkbox" name="Q1[]" value="Eletroeletronica" onclick="getPontos(2)"> Máquinas e instalações elétricas 
        <br><input type="checkbox" name="Q1[]" value="Informatica" onclick="getPontos(3)"> Usar lógica para fazer programas e sistemas
        <br><input type="checkbox" name="Q1[]" value="Alimentos" onclick="getPontos(4)"> Desenvolver, gerenciar e distribuir produtos alimenticios
        <br><input type="checkbox" name="Q1[]" value="Plasticos" onclick="getPontos(5)"> Desenvolver, gerenciar e distribuir produtos plásticos
        <br><input type="checkbox" name="Q1[]" value="Logistica" onclick="getPontos(6)"> Desenvolver, gerenciar e distribuir produtos
        <br><input type="checkbox" name="Q1[]" value="Administracao" onclick="getPontos(7)"> Gerenciar e influenciar pessoas a atingirem metas
        <br><input type="checkbox" name="Q1[]" value="Quimica" onclick="getPontos(8)"> Estudar, manusear e transformar substâncias ou materiais
        <br><input type="checkbox" name="Q1[]" value="Meio_Ambiente" onclick="getPontos(9)"> Estudar, manusear e transformar substâncias ou materiais da natureza
        <br><input type="checkbox" name="Q1[]" value="Mecatronica" onclick="getPontos(10)"> Projetar, usar, instalar e controlar máquinas industriais
        <br><input type="checkbox" name="Q1[]" value="Eletronica" onclick="getPontos(11)"> Sistemas  e aparelhos eletrônicos
        <br><input type="checkbox" name="Q1[]" value="Telecomunicacao" onclick="getPontos(12)"> Sistemas e aparelhos de comunicação
        <br><input type="checkbox" name="Q1[]" value="Seguranca" onclick="getPontos(13)"> Instruir e garantir a segurança das pessoas e locais
        <br><br><input type="submit" value="Próximo" onclick="finalizar()">     
    </form>
</body>

Performing the functions

<script type="text/javascript">   
        efmg = 0; 
        eltelt = 0;
        info = 0;
        alm = 0;
        pltc = 0;
        log = 0;
        adm = 0;
        qmc = 0;
        ma = 0;
        resultado = 0;
            function getPontos(pontos){
                if (pontos == 1){ efmg = efmg + 1; }   
                if (pontos == 2){ eltelt = eltelt +1; }
                if (pontos == 3){ info = info + 1; } 
                if (pontos == 4){ alm = alm + 1;}  
                if (pontos == 5){ pltc = pltc + 1; }   
                if (pontos == 6){ log = log + 1; }  
                if (pontos == 7){ adm = adm + 1; }
                if (pontos == 8){ qmc = qmc +1; }
                if (pontos == 9){ ma = ma +1; }   
                if (pontos == 10){ mectron = mectron + 1; }     
                if (pontos == 11){ elt = elt + 1; }       
                if (pontos == 12){ tlcon = tlcon + 1; }         
                if (pontos == 13){ st = st + 1; }                     
            }      
            function finalizar(efmg,eltelt,info,alm,pltc,log,adm,qmc,ma,mectron,elt,tlcon,st){  
                if (efmg>eltelt){alert('Enfermagem');}else{alert('Eletroeletronica');} 
            }

It is working correctly, but the finalizar() function compares only two values.

Is there any JavaScript function that can compare all these values by themselves and find the largest of them (like the max() function in PHP)? For it is not at all feasible to compare all variables to if to find the result.

    
asked by anonymous 03.12.2016 / 21:10

2 answers

3

I'm going to make an improvement on the original code, but I do not think it's ideal, I just do not want to change its structure too much. You can test, it works as you want.

You do not need to have multiple variables to then transform into array to find the largest, you can already create the array / em> into each element of the array in just one row, just as the variable declaration only needs one line. Finishing also needs only one line:

var arrayPontos = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
function arrayPositionMax(array) {
    var max = -Infinity;
    var position = -Infinity;
    for (i = 0; i != array.length; ++i) {
        if (array[i] > max) {
            max = array[i];
            position = i;
        }
    }
    return position;
}
function getPontos(pontos){
    arrayPontos[pontos]++;
}      
function finalizar(){  
    alert(["Enfermagem", "Eletroeletronica", "Informatica", "Alimentos", "Plasticos", "Logistica", "Administracao", "Quimica", "Meio_Ambiente", "Mecatronica", "Eletronica", "Telecomunicacao", "Seguranca"][arrayPositionMax(arrayPontos) - 1]); 
}
<form name="questao1" method="post" onsubmit=""> 
        <br><input type="checkbox" name="Q1[]" value="Enfermagem" onclick="getPontos(1)"> Garantir a saúde das pessoas 
        <br><input type="checkbox" name="Q1[]" value="Eletroeletronica" onclick="getPontos(2)"> Máquinas e instalações elétricas 
        <br><input type="checkbox" name="Q1[]" value="Informatica" onclick="getPontos(3)"> Usar lógica para fazer programas e sistemas
        <br><input type="checkbox" name="Q1[]" value="Alimentos" onclick="getPontos(4)"> Desenvolver, gerenciar e distribuir produtos alimenticios
        <br><input type="checkbox" name="Q1[]" value="Plasticos" onclick="getPontos(5)"> Desenvolver, gerenciar e distribuir produtos plásticos
        <br><input type="checkbox" name="Q1[]" value="Logistica" onclick="getPontos(6)"> Desenvolver, gerenciar e distribuir produtos
        <br><input type="checkbox" name="Q1[]" value="Administracao" onclick="getPontos(7)"> Gerenciar e influenciar pessoas a atingirem metas
        <br><input type="checkbox" name="Q1[]" value="Quimica" onclick="getPontos(8)"> Estudar, manusear e transformar substâncias ou materiais
        <br><input type="checkbox" name="Q1[]" value="Meio_Ambiente" onclick="getPontos(9)"> Estudar, manusear e transformar substâncias ou materiais da natureza
        <br><input type="checkbox" name="Q1[]" value="Mecatronica" onclick="getPontos(10)"> Projetar, usar, instalar e controlar máquinas industriais
        <br><input type="checkbox" name="Q1[]" value="Eletronica" onclick="getPontos(11)"> Sistemas  e aparelhos eletrônicos
        <br><input type="checkbox" name="Q1[]" value="Telecomunicacao" onclick="getPontos(12)"> Sistemas e aparelhos de comunicação
        <br><input type="checkbox" name="Q1[]" value="Seguranca" onclick="getPontos(13)"> Instruir e garantir a segurança das pessoas e locais
        <br><br><input type="submit" value="Próximo" onclick="finalizar()">     
    </form>

If you have questions about using array you can ask specific questions to learn about it.

The question was not initially clear on what I wanted, so my original and the other answer simply talked about getting the most out of array , when in fact what I needed was not even a > array , although it can be used as well. The solution originally written:

I did not quite see where it would be used, but basically I would do so, because it has a better performance .

function arrayMax(array) {
    var max = -Infinity;
    for (i = 0; i != array.length; ++i) {
        if (array[i] > max) {
            max = array[i];
        }
    }
    return max;
}
console.log(arrayMax([5, 8, 2, 3, 6, 1]));
    
03.12.2016 / 21:25
6

There is a Math.max function:

function getMaxOfArray(numArray) {
    return Math.max.apply(null, numArray);
}
console.log(getMaxOfArray([1,2,3,4,5,6,7,8,10]));

In your case it is possible to call the function max by passing the variables as an argument:

function finalizar(efmg, eltelt, info, alm, pltc, log, adm, qmc, ma, mectron, elt, tlcon, st) {
  return Math.max(efmg, eltelt, info, alm, pltc, log, adm, qmc, ma, mectron, elt, tlcon, st);
}

console.log(finalizar(3,1,2,4,5,6,12,8,2,1,3,5,9));
    
03.12.2016 / 21:17