<div id='passarr'>1572 4528 3564 8921 4521</div>

Мне нужно создать новое случайное целое число (4 цифры), уникальное в отношении вышеуказанного содержания.

js

var content = $('#passarr').text();
var passarr = content.split(' ');
var pass = Math.floor(Math.random() * 9000) + 1000;
var i = 0;
while (i == 0) {
    if (jQuery.inArray(pass, passarr) > -1) {
        var pass = Math.floor(Math.random() * 9000) + 1000;
        i = 1;
    }
}

Кажется, это работает, но не уверен, что это правильный и кратчайший путь.
любое предложение?

0
qadenza 28 Июл 2017 в 20:31
#passarr результат?
 – 
zer00ne
28 Июл 2017 в 20:36
2
Похоже, что логическое выражение в вашем операторе if на самом деле должно быть логическим выражением в операторе while. Вам не нужен i.
 – 
4castle
28 Июл 2017 в 20:37
@ zer00ne, нет, результат pass
 – 
qadenza
28 Июл 2017 в 20:40
1
Я думаю, что @ 4castle имел в виду while (jQuery.inArray(pass, passarr) === -1)) { ... }
 – 
Rob M.
28 Июл 2017 в 20:41
1
Это работает по счастливой случайности. В (5/9000) ** 2 случаях это не сработает ...; 0
 – 
Jonas Wilms
28 Июл 2017 в 20:44

1 ответ

Лучший ответ

Ваш код - это то, что вам нужно. Однако вы можете устранить несколько более мелких ошибок (ненужный i и нерабочий код в <0,00001%):

var content = $('#passarr').text();
var passarr = content.split(' ');
do {
  var pass = Math.floor(Math.random() * 9000) + 1000;
} while (jQuery.inArray(pass, passarr) > -1);

console.log(pass);
3
Jonas Wilms 28 Июл 2017 в 20:46
Это именно тот алгоритм, который им нужен. Мое единственное предложение - переместить объявление var pass за пределы цикла, чтобы тот, кто не знает о подъеме, не был сбит с толку областью действия pass.
 – 
4castle
28 Июл 2017 в 20:50
Это на самом деле пункт, чтобы не менять его. Они удивятся, что это работает, а потом будут умнее;)
 – 
Jonas Wilms
28 Июл 2017 в 20:51
Отлично, позже я увидел, что мой код на самом деле не работает. Это работает. большое спасибо.
 – 
qadenza
28 Июл 2017 в 20:53