gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 15:20:51 24 4
gpt4 key购买 nike

我看到很多答案和文档表明您可以将属性名称数组传递给 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('<',''));

而 View 中的多级orderBy是我认为现在应该是这样的:

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

感谢评论!

关于javascript - AngularJS 按属性和自定义过滤器排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43850064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com