AngularJS自定义排序

时间:2014-10-07 00:09:37

标签: javascript angularjs angularjs-orderby

如果我有一组值:

[1,2,3,4,n / a,n / a,n / a]

如何使用orderBy创建自定义排序,以便字符串始终显示在底部?

升序示例:

[1,2,3,4,n / a,n / a,n / a]

降序示例:

[4,3,2,1,n / a,n / a,n / a]

我尝试过使用函数表达式,但这并不是我需要的。函数表达式只返回要排序的值,但如何使用自己的排序顺序?

1 个答案:

答案 0 :(得分:4)

您可以创建一个自定义过滤器,根据需要对数组进行排序。

app.filter('customOrderBy', function () {
   return function (arr) {

     var numbers = [];
     var strings = [];

       angular.forEach(arr, function(item){
            if(typeof item == 'number' ){
              numbers.push(item);     
            }
            else
              strings.push(item);     
          });

        return numbers.sort().concat(strings);
    };
});

您阵列上的ng-repeat如下所示:

  <div ng-repeat="item in array | customOrderBy track by $index">

请注意,我使用了&$ 39;跟踪$ index&#39;因为AngularJS ng-repeat指令不允许在转发器中重复。 (你的数组中有重复的#34; n / a&#34;字符串)

此处的Plunker按升序排序原始数组中的数字[2,3,1,4,&#39; n / a&#39;,&#39; n / a&#39;,&#39 ;不适用&#39;]:http://plnkr.co/edit/jmHly0lDb5IVeWd2XvHp?p=preview