我正在处理一个将1-10的10个唯一随机整数添加到数组的循环,所以预期结果将是2,1,4,6,10,7,9,8,5,3
我设法生成随机数并且仅添加唯一的数字,这是我的问题是,它没有完成10个项目,我认为问题出在检查后,它不会再次生成。
希望你能帮助我。
谢谢。
for (let i = 0; i < 10; i++) {
var arrNum = [];
setTimeout(function() {
var r = Math.floor(Math.random() * 10) + 1;
while (arrNum.includes(r) == false) {
arrNum.push(r);
}
if (i == 9) {
$('ul').append('<li>' + arrNum + '</li>');
}
}, 500);
}
ul li{
list-style-type: none;
display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul></ul>
答案 0 :(得分:2)
while (arrNum.includes(r) == false) {
arrNum.push(r);
}
只要不存在,就会添加该数字,因此它将只运行一次,如果该数字已经存在,则不会生成新的数字,您需要:
const result = [];
for(let i = 1; i <= 10; i++) {
let random;
do {
random = 1 + Math.floor(Math.random() * 10);
} while(result.includes(random));
result.push(random);
}
但是,仅用1到10的数字进行随机排列可能更容易。
答案 1 :(得分:1)
您的代码有误。 i
不是检查10次出现的理想方法,因为即使变量r
不满足您的条件arrNum.includes(r) == false
,它也会增加。
应按数组长度进行检查。
用您的代码中的if (i == 9)
替换if(arrNum.length = 10)
。
答案 2 :(得分:1)
创建一个数字从1到N(第一行)的数组。在您的情况下,将N替换为10。然后将其随机排序。
class AlbumFilter(filters.FilterSet):
album = filters.NumberFilter(name='id')
class Meta:
model = Album
fields = '__all__'