Я работаю над циклом, который добавляет 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>
-2
user123 20 Авг 2018 в 08:18

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.

2
Jonas Wilms 20 Авг 2018 в 06:05

Ваш код содержит ошибку. i не является идеальным способом проверки 10 вхождений, так как он увеличивается, даже если переменная r не удовлетворяет вашему условию - arrNum.includes(r) == false.

Проверка должна выполняться по длине массива.

Замените if (i == 9) на if(arrNum.length = 10) в вашем коде.

1
bitsobits 20 Авг 2018 в 06:21

Создайте массив с номерами от 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 ]
1
ngfelixl 20 Авг 2018 в 05:30
51924526