Angular orderBy过滤'。'谓词表达式以角度v1.0.7反转数组

时间:2014-05-15 18:10:05

标签: angularjs angularjs-filter

在angular.js 1.0.7 orderBy过滤器中使用谓词字符串'。'颠倒数组顺序。

例如:

$filter('orderBy')(['a','b','c'], '.'); // -> ['c', 'b', 'a'].

如何解释转型的逻辑?

我已经在下面找到

更新。的答案。

3 个答案:

答案 0 :(得分:3)

我无法使用AngularJS 1.2.16进行复制。使用简单的应用程序,orderBy不会对输入集进行任何修改:

Normal Order

a
b
c
d
e

Reverse Order

a
b
c
d
e

PLUNKER示例:http://embed.plnkr.co/jn8PHVrgUHqAYjApWMKd

请注意,控制器还包含一个注释语句,该语句将$scope.abc的顺序更改为不遵循自然顺序。即使有这种变化,也不会影响输出。

有关详细信息,您也可以查看orderBy的来源:https://github.com/angular/angular.js/blob/master/src/ng/filter/orderBy.js#L78

答案 1 :(得分:0)

玩一点

<ul>
    <li ng-repeat="i in abc | orderBy:'.'">{{i}}</li>

</ul>
<ul>
    <li ng-repeat="i in abc | orderBy">{{i}}</li>
</ul>

这就是诀窍,它与表达式以及数组具有原始值的事实有关。不知道为什么

答案 2 :(得分:0)

所以我终于找到了一个理智的解释我的问题,这很简单,为什么这种尴尬的行为发生,而不是它的意思或应该如何写,或者有点事。我只是逐步调试开发工具中的源代码调用,结果是:

Using '.' as a predicate in orderBy filter

事实证明,由于角度分析机制的特殊性,'。'最终被认为是NaN,在数组的排序函数中,最后return v1 < v2 ? -1 : 1;默认为false,我们得到'return 1',它会不断地反转我们的数组顺序。

您可以自己尝试[1,2,3].sort(function(a, b){return 1;}),输出结果为[3,2,1]

宾果

更新:在当前版本的角度中,此行为存在正确抛出的错误:

Error: $parse:syntax : Token '.' not a primary expression at column 1 of the expression [.] starting at [].