角度自定义orderBy结合了字母和数字排序

时间:2015-05-08 11:34:21

标签: javascript angularjs angularjs-filter

我有一个数组如下(问题简化的数据):

var myArray = ['Text 1', 'Text 9', 'Text 10'];

可以理解的是,常规的Angular orderBy在应用时产生以下内容:

Text 1
Text 10
Text 9

我正在寻找一种最优雅的方式来编写一个自定义orderBy函数,该函数将产生:

Text 1
Text 9
Text 10

谢谢!

2 个答案:

答案 0 :(得分:0)

取决于您可能拥有的数据。如果它只能是'测试x',其中x是数字:

<div ng-repeat="obj in data | orderBy: ['length', 'toString()'] track by $index ">{{obj}}</div>

http://plnkr.co/edit/EfwZL55YgrHrDANLXwtO?p=preview

答案 1 :(得分:0)

您应该为orderBy过滤器编写自定义表达式,如下所示:

var myApp = angular.module('myApp',[]);


function MyCtrl($scope) {
    $scope.myArray = ['Text 1', 'Text 9', 'Text 10'];
    
    $scope.myExpression = function(item) {
        var words = item.split(' ');
        return parseInt(words[1]);
    };
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-controller="MyCtrl">
  <ul ng-repeat="item in myArray | orderBy:myExpression">
      <li>{{item}}</li>
  </ul>
</div>