嘿所有..我需要一个能够返回前一个和下一个数字的函数,但仅限于我的数字范围内。 所以,例如,如果我的范围从0到7,并且我在6 - 下一个应该返回7.如果我在7 - 下一个应该返回0(它圈回到它)。
以前相同,如果我在0,之前应该是7.我认为modulo可以用来计算出来,但是无法弄清楚如何。该函数应该采用3个参数 - 我们所在的当前数字,最大数量,如果我们要返回或前进。
之类的东西getPreviousOrNext(0,7,“next”或“prev”)
感谢!!!
答案 0 :(得分:2)
使用modulo ..
function getPreviousOrNext(now, max, direction) {
totalOptions = max + 1; //inlcuding 0!
newNumber = now; // If direction is unclear, the number will remain unchanged
if (direction == "next") newNumber = now + 1;
if (direction == "prev") newNumber = now + totalOptions - 1; //One back is same as totalOptions minus one forward
return newNumber % totalOptions;
}
(可能会更短,但这会使其更容易理解)
编辑:“now + totalOptions - 1”阻止我们进入负数(-1%7 = -1)
Edit2:哎呀,代码中有一个小错误......“如果方向不清楚,数字会保持不变”是不正确的!
编辑3:为了获得奖金,这就是我在阅读代码完成之前所写的内容;-)(假设它不是“上一个”时它是“下一个”)。这在一个方面是丑陋和美丽的:
function getPreviousOrNext(now, max, direction) {
return (now + ((direction=="prev")?max:1)) % (max + 1);
}
答案 1 :(得分:1)
这是一项家庭作业吗?
我不会使用modulo,少数if / ternary语句就足够了。
答案 2 :(得分:1)
var cycle_range = function (high, current) {
return new function () {
this.next = function () {
return current = (current+1) % (high+1);
};
this.previous = function () {
return current = (current+high) % (high+1);
};
}
};
cycle_range(7, 0).next() // 1
var the_range = cycle_range(7, 0);
the_range.next() // 1
the_range.next() // 2
the_range.previous() //1
the_range.previous() //0
the_range.previous() //7