以前接到的一個項目,需求是這樣:前端
平臺:移動端HTML5,所有前端完成數組
實現功能:答題闖關,答對一道題進入下一道,題目隨機從題庫中選取。dom
規則:累計答對9道題則闖關成功,可是累計答錯4道題則闖關失敗,遊戲終止。學習
解析該如何取題:code
假如題庫中有50道題,再取題的時候是不用沒答完一道題,隨機取下一道題的。若是這樣的話效率就比較低,邏輯還複雜。對象
因此最好的方法是,計算每次遊戲須要的最大題目數就好,這裏能夠計算一下,不管用戶答對多少,答錯多少,每次最多隻會使用12道題目。索引
因此,需求就簡化成: 在這個長度50的數組裏,隨機獲取其中12項。遊戲
方法以下:get
function getRandomArray(arr,num){ //新建一個數組,將傳入的數組複製過來,用於運算,而不要直接操做傳入的數組; var temp_array = new Array(); for (var index in arr) { temp_array.push(arr[index]); } //取出的數值項,保存在此數組 var return_array = new Array(); for (var i = 0; i<num; i++) { //判斷若是數組還有能夠取出的元素,以防下標越界 if (temp_array.length>0) { //在數組中產生一個隨機索引 var arrIndex = Math.floor(Math.random()*temp_array.length); //將此隨機索引的對應的數組元素值複製出來 return_array[i] = temp_array[arrIndex]; //而後刪掉此索引的數組元素,這時候temp_array變爲新的數組 temp_array.splice(arrIndex, 1); } else { //數組中數據項取完後,退出循環,好比數組原本只有10項,但要求取出20項. break; } } return return_array; }
代碼註釋特別清晰,很容易明白,代碼不是我寫的,出處我找不到了,以爲寫得很好學習一下。
本項目中,個人數組中都是題目對象,包含了題目標題、答案列表、正確答案、每道題目的失敗提示語。這樣就很容易處理需求中的邏輯了。io