2015-04-01 83 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