#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);