Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Жёсткий затуп с генерацией уникальных чисел (https://javascript.ru/forum/misc/64942-zhjostkijj-zatup-s-generaciejj-unikalnykh-chisel.html)

innowed 15.09.2016 11:33

Жёсткий затуп с генерацией уникальных чисел
 
Здравствуйте! Код должен поместить в массив только уникальные числа.
var res=[];
var i = 0;

while(i<38){
    var n = ~~(Math.random()*100); //генерация двухзначного числа
    if(n<38 && !!res.indexOf(n)){      //чисто условно нужно число меньше 38 и уже не находящееся в массиве
        res.push(n);   //суём его в массив
        i++;
    }
}
console.log(res);


Но что-то здесь не так,потому что в массиве всё равно появляются повторяющиеся числа, не пойму никак, в чём ошибка

рони 15.09.2016 11:39

Цитата:

Сообщение от innowed
!!

не верно

innowed 15.09.2016 12:10

Вложений: 1
Цитата:

Сообщение от рони (Сообщение 428764)
не верно

Я и так пробовал, хотя двойное отрицание должно так же истинный результат вернуть. Всё равно повторяется, я уже с ума схожу

рони 15.09.2016 12:35

innowed,
Цитата:

Сообщение от innowed
хотя двойное отрицание должно так же истинный результат вернуть

то есть пофигу на значение indexOf -- если вам сложно сокращать так не сокращайте
if(n<38 && res.indexOf(n) == -1)

рони 15.09.2016 12:45

innowed,
:-?
if(n<38 && !~res.indexOf(n))

innowed 15.09.2016 13:45

Это всё ведёт в бесконечный цикл, я почему и написал)))

рони 15.09.2016 15:55

innowed,
какая проблема сгененировать сразу что нужно? без while
Цитата:

Сообщение от innowed
Это всё ведёт в бесконечный цикл, я почему и написал)))

что на ваших картинках не видно, качество плохое.
у меня не зацикливает, но подбор может длится очень долго -- выход: генерация того что нужно сразу


Часовой пояс GMT +3, время: 14:00.