【问题标题】:How to loop through a multidimensional array with breakpoints?如何循环遍历带有断点的多维数组?
【发布时间】:2017-07-04 13:07:34
【问题描述】:

我意识到“断点”可能不是正确的术语。

我有

var sections = [0, 1, 2, 3, 4, 5, 6, 7],
    questions = [];

每个部分有 X 个问题,每个部分的问题数量可能不同。我需要能够在任何给定时间只显示一个部分的问题。所以,section[0] 可能有三个问题。我希望能够只查看这三个问题,写下答案,然后进入下一部分。我有这个的 HTML。我只是错过了 jQuery 中基本上是“好的,本节没有更多问题,转到下一节”的部分。我该怎么做?我可能没有使用正确的术语。我现在拥有的是

$.each(sections, function(i, section) {
    $.each(questions, function(j, question) {
        // stuff to show questions
    });
});

【问题讨论】:

    标签: jquery arrays multidimensional-array each


    【解决方案1】:

    假设sections 数组中的每个sectionquestion 项的数组,您可以简单地将$.each()value 属性定位为您的别名为section

    var sections = [
            [{ questionId: 1 }, { questionId: 2 }, { questionId: 3 }], //questions for section 1
            [{ questionId: 1 }, { questionId: 2 }, { questionId: 3 }, { questionId: 4 }, { questionId: 5 }], //questions for section 2
            [{ questionId: 1 }, { questionId: 2 }] //questions for section 3
        ];
    
    $.each(sections, function(i, section) {
        console.log("section " + i + ":");
    
        $.each(section, function(j, question) {
            console.log("\t" + question.questionId);
        });
    });
    

    jsfiddle 演示一些示例功能

    您希望通过在每个部分中包含一系列问题对象/项目来构建部分。如果您需要一个完全不同的结构,其中有一个单独的部分数组和单独的问题数组,则需要更改此功能,因为您需要通过标识符将给定问题与给定部分相关联。

    以下是使用filter() 实现此目的的一种方法示例:

    var sections = [
        { sectionId: 1 },
        { sectionId: 2 },
        { sectionId: 3 },
        { sectionId: 4 },
        { sectionId: 5 },
    ];
    
    var questions = [
        { questionId: 1, sectionId: 1 },
        { questionId: 2, sectionId: 1 },
        { questionId: 3, sectionId: 2 },
        { questionId: 4, sectionId: 3 },
        { questionId: 5, sectionId: 1 },
        { questionId: 6, sectionId: 4 },
        { questionId: 7, sectionId: 1 },
        { questionId: 8, sectionId: 5 }
    ];
    
    console.log("**********Example 2**********")
    $.each(sections, function(index, section) {
        console.log("Section " + section.sectionId + ":");
    
        var relatedQuestions = questions.filter(function(question) {
            return question.sectionId === section.sectionId;
        });
    
        $.each(relatedQuestions, function(index, question) {
            console.log("\tQuestion " + question.questionId);
        });
    });
    

    【讨论】:

    • 我觉得我在那里缺少某种条件语句。比如 if ( /* 最后一个问题 */ ) { /*stop*/ }
    • 对于每个内部循环,一旦问题对象/项目用完,它会自动转到下一部分并从这些问题对象/项目开始。
    • 我添加了一个演示功能的示例 jsfiddle。您可以在开发人员工具控制台中看到输出。谢谢!
    • 谢谢!是的,问题数组应该是部分的内部数组。我认为这就是我卡住的地方。
    • 我添加了另一个示例,以防您需要通过数字 id 之类的方式在单独的数组之间进行关联。
    猜你喜欢
    • 2013-08-15
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    相关资源
    最近更新 更多