AngularJS-对字符串中包含数字的重复进行排序

AngularJS - Sorting ng-repeat on string with numbers in them

本文关键字:排序 数字 字符串 包含 AngularJS-      更新时间:2023-09-26

我在表视图中有一个对象列表,我想正确排序。

除其他外,我的对象还包含一个名称字段。此名称字段也可以包含数字,例如: Chairman Seat 1 Seat 2 Seat 3 Seat 11 Seat 12 Seat 23 Secretary

然而,这是这样排序的: Chairman Seat 1 Seat 11 Seat 12 Seat 2 Seat 23 Seat 3 Secretary

按名称排序时,这似乎不是一种自然的列表排序方式。

现在我用ng重复如下: seat in seats | orderBy:orderField:orderReverse track by seat.id 其中orderfield是单击表头时设置的某个变量,orderReverse也用于反转。

我试过做一个自定义过滤器来确保它正常工作,但我失败了。似乎Javascript不会正常订购它,除非我分解字符串。但我宁愿不这样做,因为数据经常通过民意调查来更新。另一种方法是强制前导零,但由于用户手动输入这些内容,我不确定是否应该输入。

此外,它不仅仅是有数字的名字,所以我不能完全切断

那么,关于如何让这个列表正常显示,有什么建议吗?

编辑:清除了有关该问题的一些信息。

您可以使用orderBy的自定义排序函数(它也可以使用自定义排序函数)

在控制器中定义一个排序函数:

$scope.sorter = function (a){
   return parseInt(a.replace( /^'D+/g, '')); // gets number from a string
}

然后在你的模板中

seat in seats | orderBy:sorter track by seat.id

根据修改后的问题说明编辑

使用naturalSort 在控制器中进行手动排序,而不是使用ng repart

$scope.seats = [{"id": "Seat 12"},{"id": "Seat 3"},{"id": "Seat 1"},{"id": "Seat 2"},{"id": "Secretary"}];
$scope.seats.sort(function(a,b) {
    return naturalSort(a.id, b.id);
})

或者检查这个角度模块http://blog.overzealous.com/post/55829457993/natural-sorting-within-angular-js小提琴在展示它http://jsfiddle.net/wE7H2/3/

相关文章: