цикл подсчета до 100 и обратно до 0 и до 100 снова и так далее
Я должен признать, что я не математический эксперт, поэтому я не могу решить следующую проблему к моему удовлетворению.
У меня есть число, скажем i=0. У меня есть функция, которая увеличивает i при каждом вызове на 1, а затем снова вызывает себя, увеличивая i еще раз, и еще, и еще ... Когда я достигну 100, я хочу, чтобы он считал назад до 0, а затем снова вверх, как петля endles с Я иду вверх и вниз, как лифт. Какое элегантное решение для этого?
мой решение пока:
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 ответов
выглядит нормально для меня, но, вероятно, продаст вашу собаку в рабство и украдет ваше пиво:
var direction = 1;
var i = 0;
function count() {
i += direction;
direction *= (((i % 100) == 0) ? -1 : 1);
}
выражение abs((i % 200) - 100)
делает пилообразный шаблон, который вы хотите по мере увеличения.
Итак, что-то вроде этого:
var i = 100;
while (1) {
var j = Math.abs((i % 200) - 100);
// Use j
// ...
i += 1;
}
у вас может быть переменная, которая добавит или уменьшит сумму, если она положительная или отрицательная. Поэтому вам просто нужно изменить знак переменной.
var countingUp = 1;
var i = 0;
function count() {
i += (1 * countingUp);
if (i == 100 || i == 0)
{
countingUp *= -1;
}
}
чтобы избежать бесконечной рекурсии, просто используйте setInterval ().
window.setInterval( count, 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