[英]Sorting with Angularjs OrderBy in special cases
我有一些數據正在嘗試使用Angular的orderBy
過濾器在表中排序。 這是我嘗試排序的數據。
[
{
"name":"John Doe",
"room":"1M-103",
},
{
"name":"Joe Schmoe",
"room":"12M-353",
},
{
"name":"Bob Guy",
"room":"13M-546",
},
{
"name":"Another Person",
"room":"12M-403",
},
{
"name":"Fred No-name",
"room":"3M-204",
},
[
因此,按名稱排序就可以了。 但是,按房間排序是另一個問題。 我正在以完全相同的方式對其進行排序。 下面是我想它看起來像排序后:
1M-103
3M-204
12M-353
12M-403
13M-546
排序后的實際外觀是這樣的:
12M-353
12M-403
13M-546
1M-103
3M-204
有人能幫忙嗎? 我知道為什么要這樣排序,因為它是逐位進行並正確排序的,但是有人發現某種方式可以獲得更好的排序嗎?
您可以創建一個自定義排序器來執行此操作。
<li ng-repeat="item in items | orderBy:mySorter">{{item}}</li>
$scope.mySorter = function (item) {
return Number(item.room.split('-')[0].replace('M', ''));
}
我還為您創建了一個演示。
更新
您還可以使用正則表達式:
$scope.mySorter = function (item) {
return Number(item.room.replace(/[^\d]/g, ''));
}
實際上,sza的答案不太有效,因為它僅考慮字母“ M”之前的數字。 因此,所有以12M開頭的內容都將被讀為“ 12”,並被視為相等。 所有12M都將在11M之后和13M之前出現,但隨后會以其他12M中的隨機順序顯示。
我編寫了以下代碼:
<li ng-repeat="item in items | orderBy:mySorter">{{item}}</li>
$scope.mySorter = function (item) {
return Number(item.residenceRoom.replace('M', '.').replace('-', ''));
}
它基於M之前的數字創建一個十進制數字,M后面的數字為整數。因此12M-353將為'12 .353',而12M-403將為'12 .403',因此可以正確排序。
我看到的唯一問題是房間號是否總是3位。 例如,假設房間1M-2將被排序為“ 1.2”,而房間1M-103將被排序為“ 1.103”,因此房間2將在房間103之后被排序。但是您可以很容易地通過將所有房間格式化為3來解決此問題。數字,例如 1M-002室
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.