我是javascript的新手,并试图适应Functions
,For
循环和If
语句。我正在做一个简单的练习,从函数调用中生成 5 个随机数。我正在努力整理的一点逻辑是比较 Math.random 创建的数字,这些数字被推入数组中。使用什么最佳方法来确保要推送到数组的所有数字都是唯一的(没有重复(?我是否会在For
代码块中添加一个If
语句来检查每个数字,如果它们匹配,则重新运行 Math.random 函数?试图弄清楚这是否是解决问题的最佳方法。
function randoNumbers(min, max){
let randomNumbers = [];
for (let counter = 0; counter < 5 ; counter++){
randomNumbers.push(Math.floor(Math.random() * (max - min) + +min));
}
console.log(randomNumbers);
}
randoNumbers(1, 10);
一个非常简单的解决方案是生成数字,直到生成的数字尚未包含在数组中,然后将其推送到结果数组:
function randoNumbers(min, max) {
const randomNumbers = [];
for (let counter = 0; counter < 5; counter++) {
let num;
do {
num = Math.floor(Math.random() * (max - min) + min);
}
while (randomNumbers.includes(num))
randomNumbers.push(num);
}
console.log(randomNumbers);
}
randoNumbers(1, 10);
为了稍微好一点的复杂性,你可以使用Set
代替(set.has
比arr.includes
更快(:
function randoNumbers(min, max) {
const set = new Set();
for (let counter = 0; counter < 5; counter++) {
let num;
do {
num = Math.floor(Math.random() * (max - min) + min);
}
while (set.has(num))
set.add(num);
}
console.log([...set]);
}
randoNumbers(1, 10);
有很多方法可以解决这个问题。我正在贡献我的方式来解决这个问题。
function randoNumbers(min, max) {
let randomNumbers = [];
for (; randomNumbers.length < 5;) {
const value = Math.floor(Math.random() * (max - min) + +min);
if (!randomNumbers.includes(value))
randomNumbers.push(value);
}
console.log(randomNumbers);
}
randoNumbers(1, 10);