0

我正在寻找写一个comparator来对列表中的项目进行排序。

对于没有结束年份的项目,它们应该位于顶部。

对于有结束年份的项目,它们应该是下一个。

对于结束年份相同的项目,开始年份最低的项目应该是下一个。

到目前为止我有的东西

[item.get('end_year'), item.get('start_year')]

测试场景第一个是结束年第二个是开始年(“”存在)

"", ""
"", 2012
"", 2011
2012, 2005
2012, 2008
2011, 2011
2010, 2005
4

2 回答 2

2

在您的集合中添加一个comaprator 函数,该函数在“排序”函数中采用两个模型。当模型添加到其中时,这将按排序顺序维护您的集合。请注意,如果您更改单个模型的 start_year 或 end_year,则必须手动重新收集。

comparator: function(item1,item2) {
  var y1 = {
    start: item1.get('start_year'),
    end: item1.get('end_year')
  },
  y2 = {
    start: item2.get('start_year'),
    end: item2.get('end_year')
  };

  // If one item has no end year, sort it first
  if(y1.end === '' && y2.end !== '') return -1;
  if(y1.end !== '' && y2.end === '') return 1;

  // Sort the higher end year first
  if(y1.end > y2.end) return -1;
  if(y1.end < y2.end) return 1;

  // Sort the lower start year first
  if(y1.start < y2.start) return -1;
  if(y1.start > y2.start) return 1;

  return 0;
}
于 2012-06-26T01:17:43.920 回答
0

带着真实和咖啡:

comparator: (a, b) ->
    return -1 if not a.get("end_year") and b.get("end_year")
    return 1  if a.get("end_year") and not b.get("end_year")
    return -1 if a.get("end_year") > b.get("end_year")
    return 1  if a.get("end_year") < b.get("end_year")
    return -1 if a.get("start_year") < b.get("start_year")
    return 1  if a.get("start_year") > b.get("start_year")

    0
于 2012-06-26T03:12:40.657 回答