Как ограничить значение между 2 целыми числами?

#javascript

#язык JavaScript

Вопрос:

Допустим, я пытаюсь указать диапазон между двумя целыми числами, т. Е. 0 и 3. Все, что находится ниже этого диапазона, будет возвращаться с верхнего конца, и наоборот. Это похоже на то, как целые числа работают на других языках.

Например (диапазон от 0 до 3):

 cap(-4) // returns 0 cap(-3) // returns 1 cap(-2) // returns 2 cap(-1) // returns 3 cap(0) // returns 0 cap(1) // returns 1 cap(2) // returns 2 cap(3) // returns 3 cap(4) // returns 0 cap(5) // returns 1 cap(6) // returns 2 cap(7) // returns 3 cap(8) // returns 0  

Лучший рабочий код, который я мог бы сделать, это:

 const cap = (value, low, high) =gt; value lt; low ? high - (high - value) % (high - low   1) : (value - low) % (high - low   1)   low  

Есть ли более элегантный способ сделать это? Я чувствую, что есть способ сделать это без использования условных.

Комментарии:

1. Может low ли » или high » войти в негативы?

2. @Определенные результаты, которых я не ожидаю. Полученная функция может работать с отрицательными числами независимо от того, но я не собираюсь ее использовать.

Ответ №1:

Реализуйте частный случай диапазонов, начинающихся с нуля:

 const mod = (n, m) =gt; (m   n % m) % m;  

Затем общая операция с точки зрения этого:

 const cap = (value, low, high) =gt; low   mod(value - low, high - low   1);