2017-04-05 48 views
0

我正在製作可排序的表。表格數據來自一組對象。我需要能夠基於性能JavaScript - 撤銷數組排序

物體看起來像這樣的數組進行排序:

{ 
"AbsenceReservationID": 7220, 
"Name": "DGM", 
"Code": "ARBEIDSONGEVAL WP", 
"RequestState": "Goedgekeurd", 
"From": "2017-03-21T00:00:00+01:00", 
} 

我使用lodash,這樣我就可以很容易地排序使用以下語法我的數組:

ASC:

myArr = _.sortBy(myArr , "Name"); 

說明:

myArr = _.sortBy(myArr , "Name").reverse; 

但是我被卡在最後的排序方法。我需要能夠撤消排序,但我無法找到一個好辦法做到這一點。下面是它如何工作:

  • 第1點擊 - 排序ASC
  • 第2點擊 - 排序倒序
  • 3點擊 - 刪除此屬性排序

我覺得最困難的部分是當用戶對多個屬性進行排序,例如

我該如何實現這種屬性排序?

+1

什麼是您的初始排序(按名稱,日期,...)? – giaco

+0

爲原始排序添加另一個屬性並使用它來恢復排序。 –

+0

保留一個具有所有排序屬性的數組 – Weedoze

回答

1

你基本上有三種選擇:

  1. 不提供「未分類」選項

  2. 記住原來的順序(可能通過添加一個屬性),併爲「未分類「選項,排序在該屬性

    舉例來說,你可以添加一個originalIndex屬性:

    _.forEach(myArr, function(e, i) { e.originalIndex = i; }); 
    

    然後myArr = _.sortBy(myArr, "originalIndex");將獲得原始訂單。

  3. 保留原始陣列的地方(因爲_.sortBy創建一個副本),當你想要的「無序」版本

0

你從哪裏開始獲取數據重新使用原來的陣列? (服務)

如果它來自服務調用 - 建議只需重新調用該服務並將數據設置爲等於再次檢索到的數據。

如果你不想再做到服務的調用,只需創建於JS sortingDataunsortedData兩個對象。然後,當您使用lodash方法時,只需將其應用於sortingData數組。在第三次點擊上,請執行以下操作:

sortingData = unsortedData; 

從哪裏獲取最初的數據? (手動創建)

有兩個對象的相同方法適用於此處。一旦創建了數據,在允許排序完成之前,將未排序的數據設置爲您已生成的數據。例如

unsortedData = data; 
1

您可以使用它來創建一個原件:

var oldArr = myArr.slice(); // gives you a new copy. 

您可以排序後使用oldArr