【发布时间】:2018-08-22 08:02:27
【问题描述】:
我查看了https://math.stackexchange.com/questions/519845/modulo-of-a-negative-number 和Modulo operation with negative numbers,但我仍然想知道如何使用负模值来获取范围内的项目。
这是我下面的问题之前的一个简化用例,我有一个包含 3 张幻灯片的幻灯片 (slidesCount = 3):
slide indexes: 0 1 2
现在我想从这些数字访问右边的幻灯片:
-2 -1 0 1 2 3 4
should match slide:
1 2 0 1 2 0 1
所以我用index % slidesCount 介绍了这些案例:
0 1 2 3 4
但不是负值。 -1 % 3 返回-1 那么slidesCount + index % slidesCount 如果索引为负数是正确的表达式吗?
首先,有没有更简单/更聪明的写法:
index = index % slidesCount + (index < 0 ? slidesCount : 0)
现在我的问题是每张幻灯片显示 3 个可见项目的幻灯片, 最后一张幻灯片可能只有一个项目(下面的索引 9),所以从这些数字:
-3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12
我要匹配幻灯片:
9 0 3 6 9 0
我希望下图有意义!请帮助我用最少的ifs 得出正确的方程式:
-3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12
|________| |______________________________________________|
|| || ||
|| Math.floor( i / visibleSlides )
Math.ceil(i / visibleSlides) || ||
|| || ||
\/ \/ \/
-1 0 1 2 3 4
|___| |_______________________| |___|
|| || ||
slidesCnt + i % visibleSlides i % visibleSlides || ??
|| || ||
\/ \/ \/
3 0 1 2 3 0
|| i * visibleSlides
\/
9 0 3 6 9 0
【问题讨论】:
-
items par slide的情况需要另外的控制结构,可以考虑拆分到另一个问题吗?
-
你可以做
index = (index + slidesCount) % slidesCount -
好主意。
-
我在帖子中说的主要问题是关于每张幻灯片的项目,我不能把它分成另一个问题
标签: javascript modulo