Javascript Backbone.js性能-将类添加到嵌套集合的第一个和最后一个模型

Javascript Backbone.js性能-将类添加到嵌套集合的第一个和最后一个模型,javascript,performance,backbone.js,iteration,Javascript,Performance,Backbone.js,Iteration,我有一个大约100种产品的列表,这些产品在一页的长列表中显示。每个产品都属于一个类别,我大约有5个类别。每个产品都有一个类别id 我想给类别的每个第一个产品添加一个“.first”类,给类别的每个最后产品添加一个“.last”类 性能是关键,我自己提出了一些解决方案,但这些解决方案编写得非常糟糕,而且太繁琐 示例数据: products = { id: 1, category_id: 1; id: 2, category_id: 1; id: 3, category_id: 1

我有一个大约100种产品的列表,这些产品在一页的长列表中显示。每个产品都属于一个类别,我大约有5个类别。每个产品都有一个类别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>

这样,在渲染每个模型视图并应用正确的类时,我可以检查window.firsts或window.lasts是否包含当前模型的id。如果有更有效的方法,我很想知道

使用
Backbone.Collection.where({category\u id:})
创建一个二维数组,其中包含按类别分组的模型。届时,您将能够轻松找到所需的数据

或者,如果您不介意类别中模型的顺序,那么只需
Backbone.Collection.sortBy()
,遍历集合并查找所有索引,其中类别id在此处更改

第一种方法更好,如果你有一个类别id的列表,而且它很小。第二种方法适用于大量数据

编辑:


集合有一个下划线函数groupBy()!所以您应该使用它:
collection.groupBy(函数(模型){returnmodel.get('category_id');})

为什么不给我们看看你已经尝试过的?
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')