繁体   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