洗牌嵌套数组的不同部分

时间:2017-02-02 10:48:54

标签: javascript jquery arrays nested each

我正在尝试构建一个多项选择测验,这个测验不仅每次都会改变四个答案选项,而且还会在每次用户进行相同测验时随机调整问题的顺序。

以下是我正在处理的代码:

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

1 个答案:

答案 0 :(得分: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);
});