Mar*_*ire 0 javascript sorting string numbers angularjs
我有一个表视图中的对象列表,我想正确排序。
除其他外,我的对象包含一个名称字段。此名称字段还可以包含数字,例如:
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-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
}
Run Code Online (Sandbox Code Playgroud)
然后在你的模板中
seat in seats | orderBy:sorter track by seat.id
Run Code Online (Sandbox Code Playgroud)
根据修改后的问题陈述进行编辑:
使用自然排序在控制器中进行手动排序,而不是使用 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);
})
Run Code Online (Sandbox Code Playgroud)
或检查这个角度模块http://blog.overzealous.com/post/55829457993/natural-sorting-within-angular-js和演示它的小提琴 - http://jsfiddle.net/wE7H2/3/