2015-04-01 78 views
2

我在Angular中有一個對象數組,我試圖對其進行排序,但我無法弄清楚。Angular中的自定義過濾器帶有未定義的值

這裏的示例JavaScript:

變種應用= angular.module( '應用',[]);

function Ctrl($scope) { 
    $scope.divisions = [  
     {'group':'d','sub':1}, 
     {'group':'a'}, 
     {'group':'z','sub':2}, 
     {'group':'g','sub':20}, 
     {'group':'g'}, 
     {'group':'r','sub':11}]; 
} 

這裏的樣本HTML:

<div class="test" ng-controller="Ctrl"> 
    <div ng-repeat="division in divisions | orderBy:['sub','group']">{{division.group}}-{{division.sub}}</div> 
<div> 

這裏的小提琴:https://jsfiddle.net/r4nsyp2v/1/

,而是它的顯示,如:

d-1 
z-2 
r-11 
g-20 
a- 
g- 

我希望它顯示,如:

g-20 
r-11 
z-2 
d-1 
a- 
g- 

所以我想要顯示的'子'鍵從最大到最小,如果它存在,與未定義的'子'鍵之後。並按組的字母順序顯示帶有未定義'子'鍵的對象。

我還沒有找到訣竅呢....任何想法?

+0

嘗試'排序依據:[ ' - 子', '組' ]' – zsong 2015-04-01 18:59:45

+0

我想我可以將數組拆分成兩個不同的數組(一個'sub'定義,另一個沒有),對它們進行排序,然後將它們放回到一起。似乎應該有更清晰的方式。 – JulieMarie 2015-04-01 18:59:54

+0

使用'-sub'後使用過濾器:http://stackoverflow.com/questions/18604374/angularjs-orderby-with-empty-field – MingShun 2015-04-01 19:04:42

回答

2

你可以這樣創建自定義的順序:

$scope.order = function(division) { 
    return -(division.sub || 0); 
} 

而在HTML

<div ng-repeat="division in divisions | orderBy:order"> 

見例如https://jsfiddle.net/r4nsyp2v/2/

+0

完美,謝謝floribon! – JulieMarie 2015-04-01 19:16:06