2013-10-28 134 views
1

如何創建一個生成器,當按下按鈕時,它會選擇一個隨機單詞,並將其添加到列表中。一個簡單的隨機生成器

例如,「Apple」,「Banana」和「Pear」在我的列表中,我希望最終用戶按下一個按鈕,代碼將獲取一個水果,但完全隨機,我該如何做到這一點?

問候, 約翰

+3

我幾乎肯定,這已被問過.. –

+0

請問你能指定你的編程語言作爲標籤嗎?謝謝。 – NoChance

+0

@Emmad Kareem我已經添加了PHP和HTML,因爲我確定它可以在兩者上完成,但我不知道什麼是最好的:) – CCC

回答

0

下面是如何做到這一點的一個簡單例子。操作(在這種情況下點擊)由JavaScript處理,所以我強烈建議在那裏處理所有操作。這個想法是,你不需要單獨的HTML或特別是PHP擔心這個時候你可以打包在一個JavaScript對象。這個代碼遠非完美,但我認爲這是一個很好的起點。請注意,所有你需要做的這個運行是包含這個腳本,只需鍵入(在js中)wordRandomizer.run(myElem);myElem是一個在dom中的元素的引用(我剛在本例中使用了body)。

Demo here.

var wordRandomizer = { //the name of your "app" 
    run : function(targetElem) { //this is the function you will call to make it all happen 
    var markup = this.createMarkup(); 
    targetElem.appendChild(markup); 
    }, 
    createMarkup : function() { 
    var that = this; 
    var frag = document.createDocumentFragment(); 

    this.elem = document.createElement('span'); 

    var button = document.createElement('button'); 
    button.innerText = 'Change Item'; 
    button.addEventListener('click', function() { 
     that.changeItem(); 
    }); 

    frag.appendChild(this.elem); 
    frag.appendChild(button); 

    return frag; 
    }, 
    changeItem : function() { 
    var rand = this.getRandInt(1, this.items.length) - 1; // -1 because arrays start at 0 
    this.elem.innerText = this.items[rand]; 
    }, 
    getRandInt : function(min, max) { 
    return Math.floor(Math.random() * (max - min + 1)) + min; 
    }, 
    items : [ 
    'itemA', 
    'itemB', 
    'itemC', 
    'itemD' 
    ] 
}; 

wordRandomizer.run(document.body); 
//here, you just pass in the element where your "app" will attach its output. 
//If you want to get fancier, you could make more things optional, add more functionality, etc and pass in those options here. 

哦,你應該添加一些邏輯,以確保選擇之前將不會是同一項目的項目。有幾種方法可以很容易地做到,但我會把樂趣留給你:)

+0

感謝!欣賞它很多。現在使用它,但是我不知道如何將按鈕放在隨機生成的項目的單獨行上,而且我也不知道如何將整個腳本居中放置,因爲每次嘗試按鈕消失時都很明顯,做錯了。 – CCC

+0

您可以更改'document.createElement('elementTypeHere')'中的元素的內容,然後使用CSS來設置它們的樣式。 @CCC – m59

0

使用Javascript

var fruit; 
var rand = Math.random(); 
if (rand <= 0.33) { 
    fruit = 'Apple'; 
} else if (rand > 0.34 && rand <= 0.66) { 
    fruit = 'Banana'; 
} else if (rand > 0.67) { 
    fruit = 'Pear'; 
} 

Math.random()將返回一個數字0和1之間

5

首先,你提到一個列表;這直接轉化爲陣列。 其次,你有數量有限的選項,在數組中呈現,並且你想隨機挑選一個。這意味着隨機挑選索引(整數)。由於數組從0開始,並且不能選擇通過最後一個索引的項目,因此您需要選擇0到數組長度之間的隨機範圍

如果你只是想從按下一個按鈕,得到從列表中隨機項,你肯定會想這個隔離的前端,即JavaScript的:

var randomWords = [ 
    'Apple', 
    'Banana', 
    'Pear' 
]; 

function getRandomWordFromList(list) { 
    var index = getRandomInt(0,list.length); 
    return randomWords[index]; 
} 

function getRandomInt(min,max) { 
    return Math.floor(Math.random() * (max - min + 1)) + min; 
} 

document.getElementById('myButton').onclick = function() { // for example's sake... 
    document.getElementById('theOutput').innerHTML = getRandomWordFromList(randomWords); 
}; 

getRandomIntGenerating random whole numbers in JavaScript in a specific range?

另外,如果你的陣列被分段(即某些指標缺失),你可以使用(更安全,雖然比較繞口):

function arrayKeys(array) { 
    var i,keys = []; 
    for (i in array) { 
     if (isInt(i) && array.hasOwnProperty(i)) { 
      keys.push(i); 
     } 
    } 
    return keys; 
} 

function isInt(value) { 
    return !isNaN(parseInt(value,10)) && (parseFloat(value,10) == parseInt(value,10)); 
} 

function getRandomInt(min,max) { 
    return Math.floor(Math.random() * (max - min + 1)) + min; 
} 

function getRandomWordFromList(list) { 
    var keys = arrayKeys(list); // be sure to only get indices that exist 
    var key = getRandomInt(0,keys.length-1); 
    return list[keys[key]]; 
} 

var randomWords = [ 
    'Apple', 
    'Banana', 
    'Pear' 
]; 

delete randomWords[1]; // remove 'Banana' 

var theWord = getRandomWordFromList(randomWords); 

如果有什麼服務器端是影響隨機列表中,您可以通過PHP填充randomWords排列如下:

<?php 
$randomWords = array(
    'Apple', 
    'Banana', 
    'Pear' 
); 
?> 
<script type="text/javascript"> 
var randomWords = [<?php echo "'".implode("','",$randomWords)."'"; ?>]; 
// don't forget your getRandomWord functions 
</script> 

獎勵:如果隨機必須發生完全的服務器端,即php,這裏是一個翻譯:

<?php 
$randomWords = array(
    'Apple', 
    'Banana', 
    'Pear' 
); 

echo $randomWords[array_rand($randomWords)]; // output somewhere 
?> 
+0

大聲笑是的,我必須同意這是比我的方式更有用 – Deryck

+0

js隨機任意是正確的,但爲什麼在PHP中使用'rand'時,你可以簡單地使用'array_rand()'像'echo $ randomWords [ array_rand($ randomWords)];' – Anthony

+0

@Anthony,我已經做了更新:)刷新答案 – zamnuts

1

一個簡單的javascript關閉演示。

var generateRandom = (function() { 
    var fruit; 
    return function() { 
     if (fruit === undefined) { 
      fruit = ["Apple", "Banana", "Pear"]; 
     } 
     return fruit[Math.floor(Math.random() * fruit.length)]; 
    } 
}()); 

這裏的Math.random給出0和1,所以我將與陣列長度相乘以獲得0和fruit.length之間的數之間的數字。這將是我們要選擇的項目的索引。