Проход по диапазону в любом направлении в JavaScript - PullRequest
0 голосов
/ 07 июня 2018

Я ищу упрощенный способ достижения следующей цели:

Цикл в диапазоне 0 to x в любом направлении, где x - любое положительное число.

Вот то, что я до сих пор использовал modulus, но мне интересно, есть ли способ упростить его еще больше?

Увеличение:

v = (v + 1) % total

Уменьшение:

v = v ? (v - 1) % x : x - 1

1 Ответ

0 голосов
/ 07 июня 2018

Псевдокод увеличения уже полностью упрощен, однако вы можете упростить логику уменьшения одним из двух способов:

v = v ? v - 1 : x - 1

или

v = (v + x - 1) % x

Первыйдопустимо, потому что вы знаете, что декремент никогда не нужно будет модулировать, чтобы он находился в диапазоне [0, x), но последний подход предпочтителен, потому что он избегает ненужной логики ветвления.

Имейте в виду, хотя, как преимуществоВ случае, если x превышает половину Number.MAX_SAFE_INTEGER (2 ** 53 - 1), первый подход является единственным, который будет работать, как ожидалось.

...