随机猎取数组中的几项数据

之前接到的一个项目,需求是如许:

  • 平台:挪动端HTML5,悉数前端完成

  • 完胜利用:答题闯关,答对一道题进入下一道,问题随机从题库中拔取。

  • 划定规矩:累计答对9道题则闯关胜利,然则累计答错4道题则闯关失利,游戏停止。

剖析该怎样取题:

  • 假如题库中有50道题,再取题的时刻是不必没答完一道题,随机取下一道题的。假如如许的话效力就比较低,逻辑还庞杂。

  • 所以最好的要领是,盘算每次游戏须要的最大问题数就好,这里能够盘算一下,不管用户答对若干,答错若干,每次最多只会运用12道问题。

所以,需求就简化成: 在这个长度50的数组里,随机猎取个中12项。

要领以下:

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;
}

代码解释迥殊清楚,很轻易邃晓,代码不是我写的,出处我找不到了,以为写得很好进修一下。
本项目中,我的数组中都是问题对象,包含了问题题目、答案列表、准确答案、每道问题的失利提醒语。如许就很轻易处置惩罚需求中的逻辑了。

    原文作者:朕知道了
    原文地址: https://segmentfault.com/a/1190000003865619
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞