配列内のいくつかのデータをランダムに取得


以前に受け取ったプロジェクトのニーズは次のとおりです.
  • プラットフォーム:モバイル端末HTML 5、すべてのフロントエンドが
  • を完了
  • 実現機能:問題に答えて関門を突破し、1つの問題に答えて次の問題に入り、問題はランダムに問題ライブラリから選択される.
  • ルール:累計9問に正解するとクリアに成功するが、累計4問を間違えるとクリアに失敗し、ゲームは終了する.

  • 問題の解決方法:
  • 問題ライブラリに50問題があれば、問題を取るときに1つの問題に答えずにランダムに次の問題を取る必要はありません.これでは効率が低く、論理が複雑になります.
  • ですから、一番いい方法は、ゲームごとに必要な最大テーマ数を計算すればいいのです.ここでは、ユーザーがどれだけ答えても、どれだけ間違っても、毎回最大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; i0) {
                //            
                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;
    }

    コードの注釈は特にはっきりしていて、分かりやすくて、コードは私が書いたのではありませんて、出典は私が見つけることができなくて、書くのがとてもよく勉強すると思います.本プロジェクトでは、私の配列にはテーマオブジェクトが含まれており、テーマタイトル、答えリスト、正解、各テーマの失敗ヒント語が含まれています.これにより、需要の論理を簡単に処理できます.