我需要创建一个无限循环

时间:2018-11-04 14:31:04

标签: javascript loops infinity

出于我的目的,我需要创建一个循环,其中一个变量以这种方式循环: 0、1、2、3、4、3、2、1、0、1、2、3、4、3、2、1 ...

它看起来很简单,但是一个多小时我不知道该怎么做。 我的目的是以这种方式移动星星

*....
.*...
..*..
...*.
....*
...*.
..*..
.*...
*....
*....
.*...
..*..
...*.
....*

5 个答案:

答案 0 :(得分:2)

将该循环编写为生成器(function *... yield),然后在需要时使用它(for...of)。当然,使用代码必须提供一些终止条件。

function* bounce(min, max) {
  while (1) {
    for (let i = min; i < max; i++)
      yield i;
    for (let i = max; i > min; i--)
      yield i;
  }
}

STEPS = 10

for(let x of bounce(0, 4)) {
  console.log(x)
  if (--STEPS === 0) break;
}

答案 1 :(得分:1)

您可以使用以下代码生成所需的数字模式。但是,由于它将使浏览器崩溃,因此您将无法无限运行它。

如果要测试,我添加了使循环无限的说明。

根据您的要求,rep变量的较大值就足够了。

let min = 0; // Start/min value
let max = 4; // Max value
let dir = 1; // Count direction (+1/-1)

let counter = min; // Your counter variable

let rep = 24; // Remove this line and change condition inside while to true for infinite loop

do {
  console.log(counter);

  dir = counter===max?-1:counter===min?1:dir;
  counter+=dir;
} while (rep-->0); // Change this expression to true for infinite loop

答案 2 :(得分:0)

您可以使用setTimeout或setInterval来做到这一点:

let number = 0;
let increment = 1;
const from = 0;
const to = 4;

const starDiv = document.getElementById("star");

function printStar(number) {
  const text = [0, 1, 2, 3, 4].map(
    i => (i === number) ? '*' : '-'
  ).join('');
  starDiv.innerText = text;
}

function loop() {
  printStar(number);
  number += increment;

  if (number == to) {
    increment = -1;
  } else if (number == from) {
    increment = 1;
  }
}

const time = 10; // 10 millisecond between step
setInterval(loop, time);
<div id="star">
</div>

答案 3 :(得分:0)

您可以有一个简单的计数器,然后使用modulo 8进行迭代。

let x = (i += direction) % 8;
let y = x > 4 ? 8 - x : x;

此示例甚至打印了ascii艺术;)

let i = -1;
let direction = +1;
const out = [
  "*....",
  ".*...",
  "..*..",
  "...*.",
  "....*",
  "...*.",
  "..*..",
  ".*...",
  "*....",
];
setInterval(function() {
  let x = (i += direction) % 8;
  let y = x > 4 ? 8 - x : x;
  window.document.write(y + " " + out[x] + "<br>");
}, 1000);

答案 4 :(得分:0)

(function(min,max,max_loops)
{
    for(var loop = 1; loop <= max_loops; loop++, [min,max] = [-max,-min])
    {
        for(num = min; num < max + (loop == max_loops); num++)
        {
            console.log(".".repeat(Math.abs(num)) + "*" +  ".".repeat(Math.max(Math.abs(max),Math.abs(min)) - Math.abs(num)))
        }
    }
})(0,4,3)

但是由于您需要无限循环,因此使用generator应该更合适。