javascript – AngularJS按属性和自定义过滤器排序

我已经看到很多答案和文档,表明你可以将一组属性名称传递给Angular的orderBy过滤器,以便按多个字段排序.但是,我的一个对象属性是存储为文本的数字(字段可以是“100”,“75”,“50”或“< 25”).为了将这些值排序为数字,我一直在使用:

<div ng-repeat="item in items | orderBy:sortFunction">
   {{item.itemStatus}} - {{item.itemLevel}}
</div>

//Function in controller...
$scope.sortFunction = function(item) {
   return parseInt(item.itemLevel);
}

我现在要做的是首先按item.itemStatus排序,然后按item.itemLevel排序.没有先改变我的数据模型,有没有办法做到这一点?我可以遍历所有项目并添加一个新的属性,即itemLevel作为数字,然后使用过滤器

 ng-repeat="item in items | orderBy:['itemStatus','itemLevelAsNumber']

但我想知道是否有更好的方法来做到这一点.我试过了

 ng-repeat="item in items | orderBy:['itemStatus',sortFunction]

但我认为在该场景中使用函数期望将属性名称作为字符串返回.

谢谢!

最佳答案 问题出在我的sortFunction上.我没有意识到,如果数字是第一个,parseInt将只从混合值中提取数字.

 parseInt("25") === 25; //true
 parseInt("25+") === 25; //true
 parseInt("<25") === 25; //false - actually returns NaN

我将sortFunction更新为

 return parseInt(item.itemLevel.replace('<',''));

并且视图中的多级orderBy是我认为应该是现在的:

 ng-repeat="item in items | orderBy:['itemStatus',sortFunction]

感谢您的评论!

点赞