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

Guardar menor valor

Estou criando um cadastro básico de números, onde quero guardar o maior e menor número.

Porém reparei que, usando dígitos com 2 caracteres ele funciona perfeitamente (20, 33, 45, 60).

Mas utilizando somente um caractere (1, 5, 7) ou mais de dois caracteres (101, 180, 190) o código se perde.

Existe alguma consistência de dados para esse tipo?

8 respostas

Olá Rafael, tudo bem com você?

Qual foi a tática que você usou para fazer essa filtragem?

Eu fiz um exemplo aqui para você dar uma olhada:

function filtraValores(array){
    let menorValor = Number.POSITIVE_INFINITY;
    let maiorValor = Number.NEGATIVE_INFINITY;

Faço a definição do maiorValor sendo o menor possível, de forma que qualquer outro vai substituir o lugar dele, e o inverso também, o menorValor começa com o maior valor positivo, para que qualquer outro valor seja menor que ele

Agora é só percorrer o array:

function filtraValores(array){
    let menorValor = Number.POSITIVE_INFINITY;
    let maiorValor = Number.NEGATIVE_INFINITY;

    for(let i = 0; i < array.length; i++){
        if(array[i] > maiorValor)
            maiorValor = array[i]

        if(array[i] < menorValor)
            menorValor = array[i];
    }

    console.log(`O maior valor é: ${maiorValor}`)
    console.log(`O menor valor é: ${menorValor}`)

}

Dessa maneira aqui vai funcionar com qualquer quantidade de valores

Mas posta sua maneira que a gente pode dar uma olhada :)

Abraços e Bons Estudos!

Boa tarde Geovani, publiquei o projeto no oneDrive caso você queira ver melhor: https://drive.google.com/file/d/16Lq37XHTiI8gcKs1josNWLglOOpsJCe5/view?usp=sharing Mas de forma geral é um cadastro onde eu informo o placar de jogos. E com base nisso, ele armazena o maior e menor valor. Quando informado por exemplo 09, o comportamento é ok, porém informando apenas 9 ele se perde.

solução!

Opa Rafael, tudo bem?

Acredito que o ponto aqui foi que estava acontecendo uma comparação de String, e não de números, dessa forma o critério de ser maior, ou menor pode bagunçar um pouco, dependendo do valor ASCII dela

O ideal aqui são 3 soluções:

1: Transformar em número no HTML

<input id="placar" name="placar" type="number" placeholder="Informe o placar do jogo" class="campo campo-medio">

Agora como o type é number você pode no form fazer o seguinte:

maximoTemporada: calculaMaximoTemporada(form.placar.valueAsNumber),  

com o .valueAsNumber você irá passar com o formato correto

  1. Converter o valor do Formulário
maximoTemporada: calculaMaximoTemporada(Number(form.placar.value),  

Dessa maneira também funciona, entretanto é menos visual para o usuário que se trata de um número

Com os dados no formato numérico a questão de selecionar maior e menor vai funcionar corretamente :)

Abraços e Bons Estudos!

boa tarde Geovani, fiz as alterações que você sugeriu, porém a situação ainda persiste.Quando informo um valor menor que 10, informando apenas um caractere (ex 9) ele não contabiliza no mínino e máximo. Mas informando como 09 funciona corretamente. Mas continuarei investigando o porque. Muito obrigado.

Olá Rafael, tem certeza?

Eu testei aqui: image

Me parece correto não? Digitando 1 ele considerou como o mínimo e depois o 9 ele considerou o máximo

Abraços!

Opa, Mas quando eu intercalo entre números maiores que 10 e menores, eles não são considerados:

Então Rafael,

Olhando com base no código da última pergunta, a única questão é que faltou você adicionar o Number( para a parte do maximoTemporada:

minimoTemporada: calculaMinimoTemporada(Number(form.placar.value)), 
maximoTemporada: calculaMaximoTemporada(Number(form.placar.value)), 

Veja que seu código está tudo certo com o mínimo, e bugando no máximo, justamente porque ele ainda está trabalhando com String, e ai tem esse comportamento louco de comparação =)

Agora acredito que está 100% haahhahaaha

Abraçoss!

Realmente era somente isso que estava funcionando.

Obrigado pelo tempo e pelas dicas!