2015-07-02 2 views
0

Я использую Shisher Fisher Yates Shuffle и прошел через небольшой учебник, я вижу, что вы можете рандомизировать заказ, например 4,1,3,2,6,7,5 и т. Д. но я хочу узнать, как показывать только 1 номер. Может быть кнопка отправки, и когда я нажимаю кнопку, отображается случайное число от 1 до 7. Это число затем откладывается, поэтому, когда я попал в submit снова, будет 100% шанс, что я больше не увижу это число. Так что в принципе я могу нажать submit 7 раз, и в восьмой раз ничего не произойдет. это был Javascript я использую:Fisher Yates shuffle 1 номер показан

<script> 
Array.prototype.shuffle = function(){ 
    var i = this.length, j, temp; 
while(--i > 0) { 
    j = Math.floor(Math.random() * (i+1)); 
    temp = this[j]; 
    this[j] = this[i]; 
    this[i] = temp; 
    } 
    return this; 
} 
var arr = ['A','B','C','D','E','F','G','H']; 
var result = arr.shuffle(); 

document.write(result); 
</script> 

Я гугле это не успех, Большое спасибо.

+0

Где это подать? Вы имеете в виду фактическое представление страницы? –

+3

Смешайте массив, а затем используйте ['Array.prototype.pop()'] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/pop) или ['Array. prototype.shift() '] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/shift). Оба удаляют возвращаемое значение из массива до тех пор, пока массив не станет пустым. – Andreas

+0

Подача выполняется на главной странице, и я хочу, чтобы одно случайное число отображалось под кнопкой отправки. – Chimini

ответ

0

Вот моя реализация, которую я использовал.

function fisherYates (myArray,stop_count) { 
    var i = myArray.length; 
    if (i == 0) return false; 
    var c = 0; 
    while (--i) { 
    var j = Math.floor(Math.random() * (i + 1)); 
    var tempi = myArray[i]; 
    var tempj = myArray[j]; 
    myArray[i] = tempj; 
    myArray[j] = tempi; 
    c++; 
    if(c == stop_count)return; 
    } 
} 

Вы можете назвать это с:

fisherYates(arr,Math.min(nr_items, selectionSize)); 

Обратите внимание, что

var tempi = myArray[i]; 
var tempj = myArray[j]; 
myArray[i] = tempj; 
myArray[j] = tempi; 

является тупее версия:

var temp = myArray[i]; 
myArray[i] = myArray[j]; 
myArray[j] = temp; 
0

You может печатать определенную позицию в массиве, потому что она рандомизирована каждый раз - не так ли? Таким образом, вы можете создать переменную с этой позицией, а затем распечатать переменную. Например.

var finalResult = arr[2]; //you can have any position you want 
document.write(finalResult); 

Это должно сработать для вас.