准备NodeJS数据库内容以便在Mustache中使用

时间:2017-07-10 11:12:30

标签: json node.js underscore.js

我有一个常见问题解答库,它们被分成前端的标签,我们已经构建了一个处理它们的NodeJS应用程序,因此我们可以拥有一个FAQ数据库而不是硬编码的HTML。

我有一个NodeJS模型生成一个JSON文件,该文件通过其选项卡关联使用以下内容过滤问题:

res = _.groupBy(res, 'tab_title');

哪个输出this

但是,下面是原始JSON文件的结构,模板中的Mustache标记期望它看起来像:

{
"tabs": [
    {
        "title": "Tab title",
        "id": 1,
        "questions": [
            {
                "question": "Question here",
                "id": 1,
                "answer": "Answer here"
            },
            {
                "question": "Question two",
                "id": 2,
                "answer": "Answer here"
            }
        ]
    },
    {
        "title": "Another title",
        "id": 2,
        "questions": [
            {
                "question": "Question here",
                "id": 1,
                "answer": "Answer here"
            },
            {
                "question": "Question two",
                "id": 2,
                "answer": "Answer here"
            }
        ]
    }
}

这样前端标签可以循环显示标签,然后循环显示标签内的问题,使前端相对自动化。

我曾尝试使用_.map函数输出此结构中的所有相关信息,但我真的很挣扎。任何人都可以指出我的方向可以帮助吗?

我希望这是足够的信息,但如果没有,我可以提供更多信息。

谢谢!

1 个答案:

答案 0 :(得分:0)

所以我们开始像你一样生成组。

_.groupBy(myArray, 'tab_title');

然而,这并没有完全解决我们的问题,该对象仍然不符合预期的结构。它看起来像是:

{
    "tab_title1" : [{...}, {...}],
    "tab_title2" : [{...}, {...}]
}

因此我们可以使用map函数进一步处理:

_.map(groupObject, (lstFaqs, tab_title) => {
    let first = _.first(lstFaqs),
        tab_object = { 
            title: first.tab_title, 
            id: first.tab_id, 
            questions: _.map(lstFaqs, (faqItem) => {
               id: faqItem.faq_id,
               question : faqItem.faq_question,
               answer : faqItem.faq_answer
            }) 
        }

    return tab_object;
})

我们最终会得到一个tab_object数组。所以最终确定格式:

let result = { "tabs" : array_of_tab_object }

我希望这有帮助!