Express 检查数组是否有值,如果没有,则添加类';T

Express 检查数组是否有值,如果没有,则添加类';T,express,pug,Express,Pug,我有一个用玉石写的分类名称列表 ul li Discussion li Movie li Music li Performance li Dance li Theatre 我有一些json,它显示了添加到特定事件的类别: … values: [ { ordinal: 50469, db_value: 626, id: 50469, value: "Discussion" }, { ordinal: 5047

我有一个用玉石写的分类名称列表

ul
    li Discussion
    li Movie
    li Music
    li Performance
    li Dance
    li Theatre
我有一些json,它显示了添加到特定事件的类别:

…
values: [
{
    ordinal: 50469,
    db_value: 626,
    id: 50469,
    value: "Discussion"
},
{
    ordinal: 50470,
    db_value: 623,
    id: 50470,
    value: "Dance"
}
],
…
我有一条路线,它获取类别值:

res.render("event", {
            categories: data.result.properties.category.values
        })
我如何才能得到这样的结果,即if/else检查值是否与li标记中的值相同,并由此添加一个类。如果不在json数组中显示,则为unactive:

<ul>
    <li>Discussion</li>
    <li class="unactive">Movie</li>
    <li class="unactive">Music</li>
    <li class="unactive">Performance</li>
    <li>Dance</li>
    <li class="unactive">Theatre</li>
</ul>
  • 讨论
  • 电影 音乐 性能
  • 跳舞
  • 剧院

我首先将数据稍微调整为更易于渲染的格式,如下所示:

var _ = require('underscore');
var categoryNames = _.map(data.result.properties.category.values, function(value) {
    return value.value;
});

// categoryNames is an array like this: ['Discussion', 'Dance']

res.render("event", {
    categoryNames: categoryNames
})
ul
  each category in categoryNames
    li category
ul
  each category in ['Discussion', 'Movie', 'Music', 'Performance', 'Theatre']
    li(class=(categoryNames.indexOf(category) === -1) ? "" : "inactive") #{category}
现在,您可以得到您想要的行为,如下所示:

var _ = require('underscore');
var categoryNames = _.map(data.result.properties.category.values, function(value) {
    return value.value;
});

// categoryNames is an array like this: ['Discussion', 'Dance']

res.render("event", {
    categoryNames: categoryNames
})
ul
  each category in categoryNames
    li category
ul
  each category in ['Discussion', 'Movie', 'Music', 'Performance', 'Theatre']
    li(class=(categoryNames.indexOf(category) === -1) ? "" : "inactive") #{category}
但是,如果您真的想保留“disabled”cateogray标记,可以使用以下内联条件:

var _ = require('underscore');
var categoryNames = _.map(data.result.properties.category.values, function(value) {
    return value.value;
});

// categoryNames is an array like this: ['Discussion', 'Dance']

res.render("event", {
    categoryNames: categoryNames
})
ul
  each category in categoryNames
    li category
ul
  each category in ['Discussion', 'Movie', 'Music', 'Performance', 'Theatre']
    li(class=(categoryNames.indexOf(category) === -1) ? "" : "inactive") #{category}
首先,我将简化数据格式。您可以在将节点发送到模板之前在节点中执行此操作,也可以在模板本身中使用一些JS。我将仅在此处编辑模板:

- categoryNames = categories.map(function(c){return c.value});
这将创建一个仅包含名称的数组。(而且,它甚至不需要下划线.js.)

现在,您只需使用
indexOf()
检查数组中是否存在给定名称:


您的代码是一个开始,但它看起来会输出
类别名称
中每个项目的完整列表。哇,删除了第二个jade模板中的每个项目,很好。但是现在您没有
类别
变量。恐怕唯一合适的解决办法是我的回答得好,我很高兴我能帮你完成90%的任务;)