2016-02-16 13 views
1

Я новичок в программировании и недавно начал изучать JavaScript. Я сделал небольшую программу, которая произвольно генерирует кавычки. В настоящее время программа принимает кавычки из массива с использованием метода Math.random(). Но несколько раз произвольно сгенерированное число такое же, как и раньше, и цитата не изменяется.Как сравнить метод Math.random() сгенерированное текущее значение с предыдущим значением

Я хочу, чтобы после создания цитаты он не должен отображаться снова, пока пользователь не увидит 7 разных кавычек. Как я могу достичь этого, используя чистый JavaScript? (See JSFiddle demo)

Если вы знаете несколько решений, поделитесь ими, если это возможно.

Вот мой код:

<body> 
    <h1>Random Quotes Generator</h1> 
    <p>Click <strong>Generate</strong> button to see quotes.</p> 
    <button>Generate!</button> 
    <script src="script.js"></script> 
</body> 
var heading = document.querySelector("h1"); 
var paragraph = document.querySelector("p"); 
var button = document.querySelector("button"); 
var randomQuotes = [ 
    "I am 1st quote.", 
    "I am 2nd quote.", 
    "I am 3rd quote.", 
    "I am 4th quote.", 
    "I am 5th quote", 
    "I am 6th quote.", 
    "I am 7th quote.", 
    "I am 8th quote.", 
    "I am 9th quote.", 
    "I am 10th quote." 
]; 

var generateQuote = function() { 

    paragraph.innerHTML = randomQuotes[Math.floor(Math.random() * 10)]; 

} 

button.onclick = generateQuote; 
+2

[** Дубликат этого вопроса **] (http://stackoverflow.com/questions/6625551/math-random-number-without-repeating-a-previous-number), Джамшаид-Ахмед, ты найдешь свой ответ там. (Случайно обмануто с неправильным вопросом.) –

ответ

0

Самый короткий подход заключается в сращивании выбранного элемента из массива и нажатии его до конца. Случайное значение должно быть между 0 и 2. Это сохраняет последние 7 элементов из выбора.

var paragraph = document.querySelector("p"), 
 
    button = document.querySelector("button"), 
 
    randomQuotes = ["I am 1st quote.", "I am 2nd quote.", "I am 3rd quote.", "I am 4th quote.", "I am 5th quote.", "I am 6th quote.", "I am 7th quote.", "I am 8th quote.", "I am 9th quote.", "I am 10th quote."], 
 
    generateQuote = function() { 
 
     var quote = randomQuotes.splice(Math.random() * 3 | 0, 1)[0]; 
 
     randomQuotes.push(quote); 
 
     paragraph.innerHTML = quote; 
 
    } 
 
button.onclick = generateQuote;
<button>Generate!</button> 
 
<p></p>

+0

Спасибо. Это самый короткий и эффективный подход. Но в чем смысл использования этого «| 0» в вычислении индекса? –

+0

Поразрядный или с 0 или короткий способ лить число в целое. –

0

Я хотел бы сохранить список 7 предыдущих цитат, и убедитесь, что в настоящее время один не в этом списке. обновленный код:

var heading = document.querySelector("h1"); 
 
var paragraph = document.querySelector("p"); 
 
var button = document.querySelector("button"); 
 
var randomQuotes = [ 
 
    "I am 1st quote.", 
 
    "I am 2nd quote.", 
 
    "I am 3rd quote.", 
 
    "I am 4th quote.", 
 
    "I am 5th quote.", 
 
    "I am 6th quote.", 
 
    "I am 7th quote.", 
 
    "I am 8th quote.", 
 
    "I am 9th quote.", 
 
    "I am 10th quote." 
 
]; 
 
var previousQuotes = []; 
 

 
var generateQuote = function() { 
 
    var quoteNumber = Math.floor(Math.random() * 10); 
 
    if (previousQuotes.length > 6) { 
 
     previousQuotes.shift(); 
 
    } 
 
    while (previousQuotes.indexOf(quoteNumber) != -1) { 
 
    \t  quoteNumber = Math.floor(Math.random() * 10); 
 
    } 
 
    previousQuotes.push(quoteNumber); 
 
    paragraph.innerHTML = randomQuotes[quoteNumber]; 
 
} 
 

 
button.onclick = generateQuote;
<body> 
 
    <h1>Random Quotes Generator</h1> 
 
    <p>Click <strong>Generate</strong> button to see quotes.</p> 
 
    <button>Generate!</button> 
 
    <script src="script.js"></script> 
 
</body>

0

Вы можете сохранить previosly показали котировки в массиве и проверить, что следующее случайное сгенерированное число не существует:

var generateQuote = function() { 
    var quoteToShow = Math.floor(Math.random() * 10); 
    while(last7quotes.indexOf(quoteToShow) > 0){ 
     quoteToShow = Math.floor(Math.random() * 10); 
    } 
    last7quotes.push(quoteToShow); 
    if(last7quotes.length > 7){ 
     last7quotes.splice(0,1); 
    } 
    paragraph.innerHTML = randomQuotes[quoteToShow];  
} 

See fiddle