我只是在学习JavaScript,所以我认为入门的好方法是编写my own dice roller for an RPG I play。在本游戏中,您掷出几个六面骰子,其中每个4或5值得一个成功,每个6则值得2个成功。
我有一个功能,可以掷骰子,并通过数组将骰子传递给另一个函数,该函数对其进行HTML标准化,以显示在网页上。
为了掷骰子,我拥有标准的骰子掷骰子功能(sides
变量是因为有时您可以掷出侧面不为6的骰子,因此我将该功能用于所有骰子):
function rollDice(sides) {
return Math.floor(Math.random()*sides) + 1;
}
由于掷骰子的数量不同,因此我的主函数多次调用此rollDice()
函数并将每个结果放入数组中。
这是主要功能,其中number
是掷骰子的数量:
function dice(number) {
let results = [];
for (i=0; i<number; i++){
results.push(rollDice(6));
}
return results;
}
但是,此后,我了解了do…while
循环,并设法对其进行了重构:
function dice(number) {
let results = [];
do {
results.push(rollDice(6));
} while (results.length < number)
return results;
}
使用哪种循环更“正确”或最佳实践? for
还是do…while
?
答案 0 :(得分:1)
您可以只使用一个简单的while
循环,它等效于您的for
循环示例。
function dice(number) {
let results = [];
while (results.length < number) {
results.push(rollDice(6));
}
return results;
}
我最喜欢这种方法的可读性(部分原因是它不会创建额外的迭代器变量),但是for
循环也很好。 do...while
循环有效,但不需要额外的语法。