下划线循环2数组并匹配模板中的值

时间:2015-10-29 10:45:53

标签: javascript arrays underscore.js underscore.js-templating

我有一些带有2个数组的虚拟数据,这些数组会有一些重复的值。在我的模板中,我想比较2个数组,并将可见性类is-hidden添加到任何匹配的重复项,但我不确定如何循环两个数组并进行匹配?我可以在某种isEqual

中针对2运行each loop吗?

把手模板

<script type="text/html" id="tmpl">
    <% _.each(mappedSessions, function(session) { %>

       <p class="<% if(session === deleteSessions) { %>is-hidden<% } %>">
           Mapped Entry <u><%= session %></u> Available
       </p>
   <% }) %>
</script>

JS

var data = {
    "id": 1,
    "deleteSessions": ["X0101"],
    "mappedSessions": ["ABC123", "EDF092", "X0101"]
}

var template = _.template($('#tmpl').html());

$('.js-output').html(template(data));

2 个答案:

答案 0 :(得分:1)

在这种情况下,更好的格式数据在发送到模板之前

var data = {
    "id": 1,
    "deleteSessions": ["X0101"],
    "mappedSessions": ["ABC123", "EDF092", "X0101"]
}

var template = _.template($('#tmpl').html());
var sessions = _.map(data.mappedSessions, function (session) {
  return {
    isHidden: _.indexOf(data.deleteSessions, session) >= 0,
    value: session
  }
});

$('.js-output').html(template({ sessions: sessions }));
.is-hidden {
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>

<script type="text/html" id="tmpl">
    <% _.each(sessions, function(session) { %>
       <p class="<% if (session.isHidden) { %>is-hidden<% } %>">
           Mapped Entry <u><%= session.value %></u> Available
       </p>
   <% }) %>
</script>

<div class="js-output"></div>

答案 1 :(得分:0)

您应该使用intersection ...

var duplicates = _.intersection(a, b);

这个名字来自集合论,其中两个集合的交集是两个集合中存在的所有元素的集合。