隨機獲取數組中的幾項數據

以前接到的一個項目,需求是這樣:前端

  • 平臺:移動端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

相關文章
相關標籤/搜索