2017-04-05 70 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