簡體   English   中英

在特殊情況下使用Angularjs OrderBy排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM