[英]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.