我有一个名为cases
的对象数组,有3种排序方法:按case.keywords的长度,或按case.reason或case.category的字母顺序排序。选定的排序顺序存储在$ scope.currentSort中,该范围通过选择下拉列表进行切换。
这是我到目前为止的过滤器,它读取$ scope.currentSort的值并调用相关的排序函数。它目前适用于默认/关键字排序。所有console.log都在预期时触发。
如何返回原因和字母的字母排序类别排序?
.filter('orderBySelected', function() {
function compareKeywords(a, b) {
//Sorts by length of array keywords
if (a.keywords && b.keywords) {
if (a.keywords.length < b.keywords.length)
return 1;
if (a.keywords.length > b.keywords.length)
return -1;
return 0;
} else if (a.keywords && !b.keywords) {
return -1;
} else {
return 1;
}
}
function compareReason(a, b) {
//What do I put here to sort alphabetically by property .reason?
}
return function (input, currentSort) {
//Input is all the cases. Check which sort is desired based on value of currentSort:
if (currentSort.value == 1) {
console.log("Current sort is default :" + currentSort.name)
return input.sort(compareKeywords); //calls that sorting method above
} else if (currentSort.value == 2) {
console.log("Current sort is Reason: " + currentSort.name)
return input.sort(compareReason)
} else if (currentSort.value == 3) {
console.log("Current sort is Category: " + currentSort.name)
}
}
});
答案 0 :(得分:0)
这有效:
function compareReason(a, b) {
if (a.reason && b.reason) {
var nameA=a.reason.toLowerCase(), nameB=b.reason.toLowerCase()
if (nameA < nameB) //sort string ascending
return -1
if (nameA > nameB)
return 1
return 0 //default return value (no sorting)
} else if (a.reason && !b.reason) {
return -1;
} else {
return 1;
}
}