-1

如果我有一个值数组:

[1、2、3、4、不适用、不适用、不适用]

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

升序示例:

[1、2、3、4、不适用、不适用、不适用]

降序示例:

[4、3、2、1、不适用、不适用、不适用]

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

4

1 回答 1

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">

请注意,我在那里使用了'track by $index',因为 AngularJS ng-repeat 指令不允许在转发器中重复。(您的数组中有重复的“n/a”字符串)

Plunker 在这里按升序排序 [2, 3, 1, 4, 'n/a', 'n/a', 'n/a'] 的原始数组中的数字:http: //plnkr.co/edit /jmHly0lDb5IVeWd2XvHp?p=预览

于 2014-10-07T01:03:14.627 回答