我必须承认,我不是数学专家,这就是为什么我无法解决以下问题让我满意。
我有一个号码,比如i = 0。我有一个函数,每次调用增加i然后再调用自己,增加另一个时间和另一个和另一个...当达到100时我希望它倒数到0然后再次上升,有点像一个强项我像电梯一样上下循环。什么是优雅的解决方案?
到目前为止我的解决方案:
var countingUp = true;
var i = 0;
function count() {
if(i < 100 && countingUp) {i+=1}
if(i > 1 && !countingUp) {i-=1}
if(i===100) {countingUp=false;}
if(i===1) {countingUp=true;}
count()
}
count()
我正在寻找更短的东西。
答案 0 :(得分:7)
对我来说没问题,但可能会把你的狗卖给奴隶并偷走你的啤酒:
var direction = 1;
var i = 0;
function count() {
i += direction;
direction *= (((i % 100) == 0) ? -1 : 1);
}
答案 1 :(得分:4)
当我增加时,表达式abs((i % 200) - 100)
会产生你想要的锯齿形图案。
那么之后就是这样:
var i = 100;
while (1) {
var j = Math.abs((i % 200) - 100);
// Use j
// ...
i += 1;
}
答案 2 :(得分:3)
如果数量是正数或负数,您可以使用一个变量来增加或减少数量。所以你只需要改变变量符号。
var countingUp = 1;
var i = 0;
function count() {
i += (1 * countingUp);
if (i == 100 || i == 0)
{
countingUp *= -1;
}
}
为避免无限递归,只需使用setInterval()。
window.setInterval( count, 1 );
答案 3 :(得分:1)
只是为了好玩:
function createCounter(min,max) {
var dir = -1, val = min;
return function() { return val += ((val >= max || val <= min) ? dir=-dir : dir); }
}
然后使用它
var counter = createCounter(0,5);
counter(); // 1
counter(); // 2
counter(); // 3
counter(); // 4
counter(); // 5
counter(); // 4
counter(); // 3
counter(); // 2
counter(); // 1
counter(); // 0
counter(); // 1
counter(); // 2