gpt4 book ai didi

sorting - backbone.js 中的多重排序

转载 作者:行者123 更新时间:2023-12-04 23:55:42 25 4
gpt4 key购买 nike

在主干中排序它工作正常。但我想对多个字段进行排序,现在通过单击排序标题动态传递排序参数。我有 5 个标题(id、desc、类型、类别、层次结构)。当我单击任何标题时,它按升序排序,然后单击降序,但问题是仅按一个属性排序我想将多个属性传递给集合并保持先前​​的排序顺序并再次排序直到数据是相对的。

收藏:

   sortAsc: function(sortField) {
var key = sortField;
this.comparator = function(model) {
return model.get(key);
};
this.sort();
},

sortDesc: function(sortField) {
var key = sortField;
this.comparator = function(a, b) {
a = a.get(key);
b = b.get(key);
return a < b ? 1 : a > b ? -1 : 0;
}
this.sort();
},

View :当单击标题(单击事件)且元素 ID 为(单击时动态更改)ID、描述、类别、类型和层次结构时调用。

        sortItems: function(e) {            
if ( currentClass.indexOf("ascending")>0 ) {
this.currentcollection.sortAsc(elem.id);
}

else {
this.currentcollection.sortDesc(elem.id);
}

},

最佳答案

我会创建一个函数来接收比较器数组并返回一个复合比较器,这样 comparators[n] 就是 comparator[n-1] 的平局

var createCompositeComparators = function(comparators){
return function(a,b){
var i = 0;
var tempResult = 0;
for(i=0; i<comparators.length; i++){
tempResult = comparators[i](a,b);
if (tempResult !== 0 ) return tempResult;
}
return tempResult;
};
};

以及从字段创建比较器的函数,它应该接受 [+|-]fieldName(例如 +count 或 -count)

var createFieldComparator = function(fullField){
var field = fullField.substring(1);
var desc = fullField.substring(0,1) === "-" ? -1 : 1;
return function(a, b) {
return desc * (a.get(field) - b.get(field));
};
}

以 sortByFields 结束:

sortByFields: function(sortFields){ // array
var comparators = _.map(sortFields, createFieldComparator);//Create a list of comparators from a list of fields in the form of [+|-]field
this.comparator = createCompositeComparators(comparators);
this.sort();
}

要使用它,只需发送一个字段数组

collection.sortByFields(["+Category", "-ID"]);

当然这个代码还没有生产就绪......没有测试

关于sorting - backbone.js 中的多重排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23217101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com