Ich versuche, ein Multiple-Choice-Quiz zu erstellen, die nicht nur die vier Antwortoptionen jedes Mal mischt, sondern auch die Reihenfolge, in der die Fragen erscheinen, wenn der Benutzer das gleiche Quiz durchführt.Shuffling verschiedener Teile von verschachtelten Array
Hier ist der Code, den ich arbeiten:
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);
})
Dieser mischt die Fragen, aber ich sehe, dass ich auch einen Schritt tiefer gehen die Optionen unter jeder Frage Wert verschachtelt zu mischen. Ich habe ein begrenztes Verständnis dafür, wie $.each()
funktioniert und wie dies innerhalb der geschachtelten Arrays ausgeführt wird.
Die entscheidende Sache ist, dass das resultierende Array die gemischten Optionen nicht von der Frage trennen sollte, mit der sie verbunden sind.
Nicht sicher, ob verschachtelter Arrays der richtige Weg ist, um dieser zu gehen, anstatt einen Hash verwenden (obwohl der Schlüssel in der Tatsache liegt, dass ich verwenden, nur das Wort „assoziiert“ in diesem letzten Absatz!)
TIA
Wie wäre es mit '{fisherYates (this); Fischerei (das [1])}? – georg
obwohl ich das upvoted, dachte ich, dass es dasselbe wie Bartek Suskis Lösung unten ist. Ich habe es nicht sorgfältig genug gelesen. Als ich dies anwendete, erschienen die Fragen nach den Optionen im resultierenden Array. Keine große Sache, aber nicht genau das, was ich will. –