如何扩展此AngularJS过滤器以按对象属性按字母顺序排序?

时间:2014-02-03 16:20:09

标签: javascript angularjs sorting

我有一个名为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)
    }



}
});

1 个答案:

答案 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;
    }

}