2:00 PM – Professor, estou querendo descobrir o valor máximo e o menor valor de um array de números. Já tentei usar essas funções max e min que tem na biblioteca Math e nada.
vou mandar meu código pro senhor ver, ah desculpa enviar isso a uma hora dessa.
let notas = [6.5, 4.3, 8.75, 9, 3];
Math.max(notas);
Math.min(notas);
2:01 PM A resposta que sai é NaN. Help me!
Já vi daqui o seu problema, jovem chimpanzé, e vou te ajudar a encontrar a melhor solução! Mas antes temos que considerar algumas coisas sobre as funções max e min da biblioteca Math:
- Ambas precisam que números sejam passados como argumentos, caso não seja passado nenhum, o resultado será -Infinity (max) ou Infinity(min).
- Caso algum dos argumentos passados não possa ser convertido para número o retorno é NaN.
No seu caso, você está tentando passar um array, vamos considerar três alternativas, e a última eu acho que é mais bacana.
1 – Utilizando o método reduce()
esqueleto do método:
array.reduce((s, a)=> ‘operação com s e a’);
Em geral o método reduce() é utilizado para somar todos os elementos de um array. Mas, no seu caso, podemos utilizá-lo para comparar par por par de elementos do array e ficar só com o menor ao final. da seguinte forma:
notas.reduce((a,b)=>Math.max(a,b))
notas.reduce((a,b)=>Math.min(a,b))
2 – usando o apply : O ES6/ES2015 ajudando de montão.
Math.max.apply(Math, notas);
Math.min.apply(Math, notas);
Essa é a hora de você dizer “E era só isso?”.
Indica-se que deva ser usado em arrays com poucos elementos, mas o melhor está ainda por vir, o terceiro modo é um filezinho.
3 – Três pontinhos do poder 😀
Nobre chimpa, entenda que todo o problema residia no fato de você estar tentando desde o início empurrar um array pela goela do Math.max() e do seu irmão Math.min(). A partir de agora você vai espalhar os elementos do array dentro desse método utilizando o spread operator.
Math.max(…notas) ;
Math.min(…notas)
e voilá, meu amigo. Em outra postagem falarei mais sobre o poder do spread operator, usos, aplicações e sobre seu gêmeo o rest operator.
Todo o diálogo foi fictício porém baseado em fatos reais.