100 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 vous pouvez le faire :

$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 faire cela en javascript, sans devoir écrire de multiples if des déclarations et des choses de ce genre ? Merci.

218voto

Comme ceci

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

Démonstration 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")   )
)

0 votes

Do Javascript a comme intval(num) fonction. Parce que je sais seulement parseInt(num) ?

0 votes

Je ne connais pas le php, désolé d'avoir édité cela, je le considère comme une fonction définie par l'utilisateur.

3 votes

Maintenant, nos réponses sont identiques, donc je supprime la mienne.

33voto

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 y Math.min :

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

Dans les deux cas, il est relativement facile de s'embrouiller. Vous pouvez donc envisager d'avoir une fonction utilitaire si vous faites cela à plusieurs endroits :

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

Ensuite :

number = clamp(number, 0, 100);

18voto

Utilisez la fonction clamp méthode :

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

0 votes

C'est ce que je cherchais. Merci.

14voto

Lonely Neuron Points 2839

Il n'y a pas besoin de plus d'explications :

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

0 votes

Cela fonctionnerait-il aussi pour les nombres négatifs, comme la transformation -xdeg ?

0 votes

@RyanStone que voulez-vous dire par "transformer -xdeg" ? Cela fonctionne également pour les valeurs négatives, oui. Vous pouvez appeler clamp(-5, -1, 1) et il retournera -1 .

0 votes

Je voulais l'utiliser dans Css Transform:rotateX() ; qui prend des valeurs négatives Via Javascript

9voto

Rafe Points 313

En rapport : Quelle est la manière la plus élégante d'associer un nombre à un segment ? :

Mise à jour pour ECMAScript 2017 :

Math.clamp(x, lower, upper)

Mais notez qu'à partir d'aujourd'hui, c'est une étape 1. proposition . Jusqu'à ce qu'elle soit largement supportée, vous pouvez utiliser une polyfill .

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