Показать сообщение отдельно
  #2 (permalink)  
Старый 03.05.2016, 11:47
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от daniil_angel
как сделать так, чтобы цифры в массиве не повторялись, т.е. чтоб каждая цифра была уникальна?
Создать массив уникальных значений, random формирует индекс этого массива.

После 9 проходов ведь все равно будет повторение. Чтобы не проверять ранее сформированного значения, можно перемешивать массив, затем извлекать из него последний элемент, возвращая его, таки образом он уже не будет повторен гарантировано:

<script>
var a = [1,2,3,4,5,6,7,8,9];

Array.prototype.shuffle = function() {
    for (var i = this.length - 1; i > 0; i--) {
        var num = Math.floor(Math.random() * (i + 1)), 
            d = this[num];
        this[num] = this[i];
        this[i] = d;
    }
    return this;
}

function rnd() {
    if(a.length) {
        a.shuffle();
        return a.pop()
    } else return 0;
}
</script>
<button onclick="alert(rnd())">GO</button>

Последний раз редактировалось laimas, 03.05.2016 в 12:13.
Ответить с цитированием