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

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

但是,排序如下:
ChairmanSeat 1Seat 11Seat 12Seat 2Seat 23Seat 3Secretary

按名称排序时,这似乎不是对列表进行排序的自然方法。

现在我正在像这样使用ng-repeat:
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-repeart

$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/

关于javascript - AngularJS-对其中包含数字的字符串进行ng-repeat排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25766876/

10-11 03:12