Я работаю над циклом, который добавляет 10 уникальных случайных целых чисел от 1 до 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>
3 ответа
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.
Ваш код содержит ошибку. i
не является идеальным способом проверки 10 вхождений, так как он увеличивается, даже если переменная r
не удовлетворяет вашему условию - arrNum.includes(r) == false
.
Проверка должна выполняться по длине массива.
Замените if (i == 9)
на if(arrNum.length = 10)
в вашем коде.
Создайте массив с номерами от 1 до N (первая строка). Замените N на 10 в вашем случае. Тогда сортируйте это случайно.
const numbers = [ ...Array(N).keys() ].map(o => o + 1);
numbers.sort(() => Math.random() - 0.5);
console.log(numbers); // [ 6, 4, 5, 2, 1, 9, 3, 7, 8, 10 ]
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.