2017-02-02 8 views
1

私は、毎回4つの回答オプションをシャッフルするだけでなく、ユーザーが同じクイズをとるたびに質問が表示される順序をシャッフルする複数の選択肢のクイズを作成しようとしています。ネストされた配列の異なる部分をシャッフルする

は、ここで私が働いているコードです:

function fisherYates(myArray) { 
var i = myArray.length, j, tempi, tempj; 
if (i === 0) return false; 
while (--i) { 
    j = Math.floor(Math.random() * (i + 1)); 
    tempi = myArray[i]; 
    tempj = myArray[j]; 
    myArray[i] = tempj; 
    myArray[j] = tempi; 
} 
} 
$(function() { 
    content = [ 
     ["Q1",["Q1-1", "Q1-2", "Q1-3", "Q1-4"]], 
     ["Q2",["Q2-1", "Q2-2", "Q2-3", "Q2-4"]], 
     ["Q3",["Q3-1", "Q3-2", "Q3-3", "Q3-4"]] 
    ]; 

    $.each(content, function(i) { fisherYates(this) }); 
    fisherYates(content); 
}) 

これは質問をシャッフルが、私はまた、各質問の値の下にネストオプションをシャッフルするより深い一歩を行く必要があることを参照してください。 $.each()がどのように動作するか、およびネストされた配列内でこれを実行する方法を理解していません。

重要なことは、得られた配列がシャッフルされたオプションを関連する質問から分離してはならないことです。

ないネストされた配列ではなく、ハッシュを使用するよりも、このついて行くには正しい方法であれば確認してください(手がかりは、私はちょうどその最後の段落に「関連する」という言葉を使用しているという事実にあるのかもしれないが!)

TIA

+2

「{fisherYates(this); fisherYates(this [1])} '? – georg

+0

私はこれを断言しましたが、以下のBartek Suskiの解決策と同じだと思いました。私はそれを十分に慎重に読まなかった。これを適用すると、結果の配列のオプションの後に質問が表示されました。大したことではありませんが、正確に出力をしたいものではありません。 –

答えて

2

あなたのコードは、回答テーブルで質問をシャッフルします。あなたは各機能の中で一層深く進む必要があります。

$(function() { 
    content = [ 
     ["Q1",["Q1-1", "Q1-2", "Q1-3", "Q1-4"]], 
     ["Q2",["Q2-1", "Q2-2", "Q2-3", "Q2-4"]], 
     ["Q3",["Q3-1", "Q3-2", "Q3-3", "Q3-4"]] 
    ]; 

    $.each(content, function(i) { fisherYates(this[1]) }); 
    fisherYates(content); 
}); 
+0

はい、それは私が 'content 'を' content [i] 'に編集して別の方法で解決したときに実行していた' for'ループよりもエレガントです –

関連する問題