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.
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);
Utilisez Math.min
et Math.max
.
Pas besoin d'explication supplémentaire:
function clamp(value, min, max) {
return Math.min(Math.max(value, min), max);
}
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 .