我不确定如何以一种可以理解的方式表达我的问题,所以我在下面创建了一个图表。该示例特定于JavaScript和Backbone.js,但我认为这也可能被视为一般编程问题。
我有一个Backbone集合的例子,我无法理解值是如何传递的。我假设'任务'可以很容易地像'taco'或'horse'那样任意值,并且工作得很好。我只是想知道“任务”在何处以及如何将其值映射到它。
以下是我如何看待这个问题,我试图在下面重新构建我的困惑之路:
如果有帮助,这是任务模型:
var Task = Backbone.Model.extend({
isComplete: function() {
return this.get('completed_at') !== null;
}
});
答案 0 :(得分:1)
比较器函数由下划线的_.sortBy
调用,数组元素作为参数,有大量的对象创建和迭代正在进行,本质上归结为更快的本机排序:
someArrayOfTasks.sort( function( taskA, taskB ) {
return taskA.dueDate < taskB.dueDate ? -1 :
taskA.dueDate > taskB.dueDate ? 1 : 0;
});
或者更简单的例子:
[3,2,5,1,4].sort( function(a,b){
return a-b;
});
//[1, 2, 3, 4, 5]
[3,2,5,1,4].sort( function(a,b){
return b-a;
});
//[5, 4, 3, 2, 1]
比较器函数在尝试解析排序顺序时从sort函数获取其参数,从比较器返回的值确定数组的排序顺序。
我建议对主干排序进行正常排序,因为它对我来说比使用Chrome快10倍且更容易理解,因为比较器功能实际上......比较:http://jsperf.com/underscore-sort-vs-normal-sort
答案 1 :(得分:0)
Collection的Comparator函数将Model作为输入。我认为你必须编写比较器,如:
function (task){
return task.get('dueDate');
}
注意:骨干比较器与普通JS阵列排序比较器不同!