2015-05-08 115 views
1

我有一個數組如下(簡化的問題的數據):結合英文字母及數字排序角定製ORDERBY

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

Understandbly施加時的規則的角度ORDERBY產生以下:

Text 1 
Text 10 
Text 9 

我正在尋找最優雅的方式來編寫自定義orderBy函數,它將產生:

Text 1 
Text 9 
Text 10 

謝謝!

回答

0

你應該寫自定義表達式爲排序依據篩選這樣的:

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>

+0

什麼如果「文字」不同? –

+0

謝謝!這給了我我需要的東西。我簡化了這個問題,因爲myArray也可以是沒有數字的文本,需要按字母順序排序,但不是兩者的混合(即所有元素都有數字或沒有數字)。儘管我使用了myExpression,但只是添加了一個isNaN檢查,如果沒有數字,它將簡單地返回項目。 – Andrew