循环计数到100并再次返回0并再次高达100,依此类推

时间:2011-11-29 22:09:43

标签: javascript loops count

我必须承认,我不是数学专家,这就是为什么我无法解决以下问题让我满意。

我有一个号码,比如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()

我正在寻找更短的东西。

4 个答案:

答案 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;
    }
}

fiddle here.

为避免无限递归,只需使用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