我有一页的长列表中显示了约 100 种产品的列表。每个产品属于一个类别,我大约有 5 个类别。每个产品都有一个 category_id。
我想为一个类别的每个第一个产品添加一个“.first”类,为一个类别的每个最后一个产品添加一个“.last”类。
性能是关键,我自己想出了一些解决方案,但写得非常糟糕而且太麻烦了。
示例数据:
products = {
id: 1, category_id: 1;
id: 2, category_id: 1;
id: 3, category_id: 1;
id: 4, category_id: 2;
id: 5, category_id: 2;
id: 6, category_id: 2;
id: 7, category_id: 3;
id: 8, category_id: 3;
...
}
我正在寻找的结果:
<ul>
<li class='first' id='1'></li>
<li id='2'></li>
<li class='last' id='3'></li>
<li class='first' id='4'></li>
<li id='5'></li>
<li class='last' id='6'></li>
<li class='first' id='7'></li>
<li id='8'></li>
...
</ul>
编辑:感谢您的帮助@niemand!我使用了 groupBy ,这就是我到目前为止所拥有的。这是解决这个问题的好方法,性能明智吗?
window.firsts = []
window.lasts = []
@grouped = _.groupBy(@collection.toJSON(), 'category_id')
_.each @grouped, (group) ->
window.firsts.push new App.Models.Piece(_.first(group)).get('id')
window.lasts.push new App.Models.Piece(_.last(group)).get('id')
这样,当我渲染每个模型视图并应用正确的类时,我可以检查 window.firsts 或 window.lasts 是否包含当前模型的 id。如果有一种更高效的方式来解决这个问题,我很想知道!