我正在尝试使用comparator函数对对象数组进行排序,但是似乎comparator函数被完全忽略了(请参阅angular documentation)。

我正在使用angularJS 1.5.6。

这是一个JSFiddle

HTML:

<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.6/angular.min.js">
</script>
<body ng-app="app" ng-controller="ctrl">
    {{msg}}
</body>

JavaScript:
angular.module("app", [])

.factory('f1', function($filter) {

    var f1 = {};

    function comparator(a,b) { console.log(a,b); return a.id - b.id; }
    function getter(x) { /*console.log(x);*/ return x; }

    f1.testOrderBy = function() {
        return $filter('orderBy')(
            [ {id:3}, {id:1}, {id:2} ],
            getter,
            false,
            comparator
        )
        .map(function(x) { return x.id; })
    };

    return f1;
})

.controller("ctrl", function($scope, f1) {
    $scope.msg = f1.testOrderBy();
})

我的问题:为什么忽略comparator? (这可以看到,因为从未进行过console.log()调用)。这是angularJS错误吗?

因此,我什至无法使用自定义比较器对对象数组进行排序。

谢谢!

最佳答案

因为 1.5.7 中添加了对orderBy中的自定义比较器的支持。

您可以阅读changelog here

如果您在documentation中检查 1.5.6 ,则会看到该api被描述为:

$filter('orderBy')(array, expression, reverse)

1.5.7 中,它是:
$filter('orderBy')(collection, expression, reverse, comparator)

关于javascript - 为什么AngularJS的 `orderBy`过滤器会忽略 `comparator`参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37877467/

10-11 23:29