按年末和开始年份排序

时间:2012-06-25 23:18:32

标签: javascript backbone.js comparator

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

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

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

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

我到目前为止的东西

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

首先测试sceanrios是结束年份第二年是开始年份(“”存在)

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

2 个答案:

答案 0 :(得分:2)

为您的集合添加comaprator函数,该函数在'sort'函数中包含两个模型。这将在添加模型时按照排序顺序维护您的集合。请注意,如果更改单个模型的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;
}

答案 1 :(得分: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