83 votes

Comment puis-je utiliser JavaScript pour limiter un nombre entre une valeur min/max ?

Je veux limiter un nombre entre deux valeurs, je sais qu'en PHP on peut faire ça :

 $number = min(max(intval($number), 1), 20);
// this will make $number 1 if it's lower than 1, and 20 if it's higher than 20

Comment puis-je le faire en javascript, sans avoir à écrire plusieurs if et des trucs comme ça ? Merci.

163voto

comme ça

 var number = Math.min(Math.max(parseInt(number), 1), 20);

Démo en direct :

 function limitNumberWithinRange(num, min, max){
  const MIN = min || 1;
  const MAX = max || 20;
  const parsed = parseInt(num)
  return Math.min(Math.max(parsed, MIN), MAX)
}

alert(
  limitNumberWithinRange(  prompt("enter a number")   )
)

21voto

T.J. Crowder Points 285826

Vous avez au moins deux options :

Vous pouvez utiliser une paire d'opérateurs conditionnels ( ? : ):

 number = number > 100 ? 100 : number < 0 ? 0 : number;

Ou vous pouvez combiner Math.max et Math.min :

 number = Math.min(100, Math.max(0, number));

Dans les deux cas, il est relativement facile de se confondre, vous pouvez donc envisager d'avoir une fonction utilitaire si vous le faites à plusieurs endroits :

 function clamp(val, min, max) {
    return val > max ? max : val < min ? min : val;
}

Puis:

 number = clamp(number, 0, 100);

9voto

Utilisez la méthode clamp lodash :

_.clamp(22, 1, 20) // Outputs 20

7voto

Lonely Neuron Points 2839

Pas besoin d'explications supplémentaires :

 function clamp(value, min, max) {
    return Math.min(Math.max(value, min), max);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X