Как я могу использовать JavaScript, чтобы ограничить число между значением min / max? - PullRequest
54 голосов
/ 30 апреля 2011

Я хочу ограничить число между двумя значениями, я знаю, что в PHP вы можете сделать это:

$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

Как я могу сделать это в javascript, без необходимости писать несколько if операторов и тому подобное? Спасибо.

Ответы [ 6 ]

102 голосов
/ 30 апреля 2011

как это

var number = Math.min(Math.max(parseInt(number), 1), 20);
7 голосов
/ 15 декабря 2017

У вас есть как минимум две опции:

Вы можете использовать пару условных операторов (? :):

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

Или вы можете объединить Math.max и Math.min:

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

В обоих случаях можно легко запутаться, поэтому вы можете рассмотреть возможность использования вспомогательной функции, если вы делаете это в нескольких местах:

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

Тогда:

number = clamp(number, 0, 100);
6 голосов
/ 16 ноября 2018

Использовать зажим Лодаша метод:

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

1 голос
/ 31 января 2019

Не нуждается в дополнительном объяснении:

function clamp(value, min, max) {
    return Math.min(Math.max(value, min), max);
}
1 голос
/ 30 апреля 2011

Используйте Math.min и Math.max.

0 голосов
/ 21 апреля 2019

Похожие: Какой самый элегантный способ привязать число к сегменту? :

Обновление для ECMAScript 2017:

Math.clamp(x, lower, upper)

Но обратите внимание, что на сегодняшний день это предложение на 1 этапе .Пока он не получит широкую поддержку, вы можете использовать polyfill .

...