0

comparatorリスト内のアイテムを並べ替えるためにを書きたいと思っています。

終了年のないアイテムについては、それらが一番​​上にあるはずです。

終了年のあるアイテムについては、次の年にする必要があります。

同じ終了年のアイテムの場合、開始年が最も低いアイテムが次の年になります。

私が今まで持っているもの

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

テストsceanriosは、最初は終了年、2番目は開始年です( ""が存在します)

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

2 に答える 2

2

'sort' 関数で 2 つのモデルを使用するコレクションに、comaprator 関数を追加します。これにより、モデルがコレクションに追加されると、コレクションがソートされた順序で維持されます。1 つのモデルの 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

真実とcoffescriptで:

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 に答える