web-dev-qa-db-fra.com

Comment utiliser JavaScript pour limiter un nombre entre une valeur minimale/maximale?

Je veux limiter un nombre entre deux valeurs, je sais que dans 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 avoir à écrire plusieurs instructions if et d'autres choses du même genre? Merci.

45
Alexandra

comme ça 

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

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 vous perdre, vous pouvez donc envisager d'utiliser une fonction utilitaire si vous effectuez cette opération à plusieurs endroits:

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

Ensuite:

number = clamp(number, 0, 100);
6
T.J. Crowder

Utilisez Math.min et Math.max.

1
Femaref

Pas besoin d'explication supplémentaire:

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

Connexes: Quelle est la manière la plus élégante de plafonner un nombre à un segment? :

Mise à jour pour ECMAScript 2017:

Math.clamp(x, lower, upper)

Mais notez qu’à ce jour, c’est une étape 1 proposition . En attendant que cela soit largement supporté, vous pouvez utiliser un polyfill .

0
Rafe