簡體   English   中英

如何擴展此AngularJS過濾器以按對象屬性按字母順序排序?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM