排序集合与两列首先由一列,然后由第二列在Backbone.js
Sort collection with two columns first by one column and then by the second one in Backbone.js
我需要按降序排序一个有两列的集合,但首先考虑第一列的顺序,然后是第二列,一列只是一个标志(0和1),另一列包含日期,我想以一种方式排序数据,显示如下
2014年5月20日 2014年5月15日2014/5/30
2014/5/25
04/11/2014
这是我的代码看起来像,但不工作,我不知道我做错了什么
extendCollection: function(Collection) {
_.extend(Collection.prototype, {
comparator : function( model ) {
var dateCreated = new Date(model.get('dateCreated')).getTime();
return model.get('isFavorited') > dateCreated ? -1 : 1;
}
});
return Collection;
}
From the fine manual:
比较器
collection.comparator
[…比较器可以定义为sortBy(传递一个接受单个参数的函数),sort(传递一个需要两个参数的比较器函数),或者作为一个字符串表示要排序的属性。
注意比较器可以接受两个参数。如果您使用两个参数comparator
,则逻辑很好且简单:
comparator: function(a, b) {
var a_fav, b_fav, a_date, b_date;
a_fav = a.get('isFavorited');
b_fav = b.get('isFavorited');
if(a_fav > b_fav)
return -1;
if(a_fav < b_fav)
return 1;
a_date = new Date(a.get('dateCreated'));
b_date = new Date(b.get('dateCreated'));
if(a_date > b_date)
return -1;
if(a_date < b_date)
return 1;
return 0;
}
不需要奇怪的映射技巧或无意义的东西,只需要简单清晰的比较逻辑。在处理多个排序键、反向字符串排序和其他重要排序任务时,您几乎总是使用Array.prototype.sort
风格的两个参数comparator
。
如果您在parse
方法中将dateCreated
字符串属性转换为真实的Date
实例,并且在设置新值时,事情会更简单。
这是一个hack,但应该做的工作:
return -model.get("isFavorited") * Math.pow(10, 20) - dateCreated
感谢下面的更正
相关文章:
- "改变“;列表头,然后继续处理列表
- 获取表中每行的一列的内容,然后循环访问每个内容
- 附加到两列中的一列,然后附加到另一列
- 上传 CSV 文件,然后显示列的标题
- 使用CryptoJS散列密码的安全性,然后使用php password_hash()
- 从 Javascript 中的二维数组中获取列
- 重新创建 3 列 facebook 风格的部分滚动,然后固定位置 CSS
- AG-Grid 将列标题设置为复选框,然后执行全选或取消全选列,而不是仅组
- 如何通过输入类型在一列中选择一个相同名称的值,然后提交按钮
- JQuery试图打印选中复选框的表的列,然后打印来自web服务器的响应
- 在创建二维动态表时分隔行和列
- Javascript:先按第二列desc对2D数组排序,然后按第一列asc排序
- 什么是更有效或更短的分组方式,然后使用下划线获取二维数组的百分比值
- 如何将单元格添加到表中,然后在N列之后换行
- Asp.net MVC动态WEBGRID搜索所有列,然后在同一视图中更新WEBGRID
- 从二维数组中获取列
- 如何按列值排序二维数组
- 我如何在二维数组中返回多个列
- Js根据相同列的id按不同列进行二次排序
- 排序集合与两列首先由一列,然后由第二列在Backbone.js