[英]How can I extend this AngularJS filter to sort alphabetically by object property?
我有一个称为cases
的对象数组,具有3种排序方法:按case.keywords的长度,或按case.reason或case.category的字母顺序排列。 选定的排序顺序存储在$ scope.currentSort中,可通过选择下拉列表进行切换。
到目前为止,这是我的过滤器,它读取$ scope.currentSort的值并调用相关的sort函数。 当前,它适用于默认/关键字排序。 所有console.logs都会在预期时触发。
如何为“原因和类别”排序返回字母排序?
.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)
}
}
});
这有效:
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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.