出于我的目的,我需要创建一个循环,其中一个变量以这种方式循环: 0、1、2、3、4、3、2、1、0、1、2、3、4、3、2、1 ...
它看起来很简单,但是一个多小时我不知道该怎么做。 我的目的是以这种方式移动星星
*....
.*...
..*..
...*.
....*
...*.
..*..
.*...
*....
*....
.*...
..*..
...*.
....*
答案 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应该更合适。