目前,我正在开发主干应用程序,我想根据各种属性对集合进行排序,我正在根据成本,持续时间,开始和结束日期(时间戳)进行排序,但是我正在努力根据以下条件对集合进行排序name属性,这是我的收藏代码,
var ProjectCollection = Backbone.Collection.extend({
url: '/projects',
model: app.Project,
sort_key: "finish_date",
sort_order: 1,
parent_filter: false,
initialize: function() {
var pm = this.get('projectmanager');
this.set("project_manager", new app.User(pm));
var sp = this.get('salesperson');
this.set("sales_person", new app.User(sp));
},
comparator: function (item1, item2) {
return (item1.get(this.sort_key) - item2.get(this.sort_key)) * this.sort_order;
},
sortByField: function(fieldName, orderType) {
this.sort_key = fieldName;
this.sort_order = orderType == "desc" ? -1 : 1;
console.log(this.sort_order);
this.sort();
},
});
有没有办法按字母顺序对字符串排序?
我已经添加了新的比较器函数,这是我按名称升序订购时得到的输出,
Android应用
你好世界,我是一个新的项目实例
Java应用
西蒙的计划
一些新项目
Symfony App,
Windows应用程序
iPhone应用
如您所见,iPhone应用程序不应排在最后。
最佳答案
我更改了您的编译器功能,以支持字符串和数字
编译器函数中的问题是它减去字符串会产生NaN
我将其更改为
comparator: function (item1, item2) {
var sortValue = (item1.get(this.sort_key) > item2.get(this.sort_key)) ? 1 : -1;
return sortValue * this.sort_order;
},
它将进行比较,为a> b获得值1,然后像您所做的那样将其更改为desc排序
检查这个jsFiddle
编辑:
为了支持不区分大小写的排序,应该修改比较器函数以分别处理字符串
comparator: function (item1, item2) {
var val1 = item1.get(this.sort_key);
var val2 = item2.get(this.sort_key);
if (typeof (val1) === "string") {
val1 = val1.toLowerCase();
val2 = val2.toString().toLowerCase();
}
var sortValue = val1 > val2 ? 1 : -1;
return sortValue * this.sort_order;
}
jsFiddle updated
关于javascript - Backbone 订单收集按字母顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26756801/