我正在制作一张可分类的 table . 表数据来自对象数组 . 我需要能够根据属性对数组进行排序
一个对象看起来像这样:
{
"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;
但是我坚持最后的排序方法 . 我需要能够撤消排序,但我无法找到一个好方法来做到这一点 . 以下是它的工作原理:
-
第一次点击 - 排序asc
-
第二次点击 - 排序desc
-
第3次点击 - 删除此属性的排序
我认为困难的部分是当用户对多个属性进行排序时,例如
如何实现对属性排序的删除?
3 回答
你基本上有三个选择:
不提供“未分类”选项
记住原始订单(可能通过为其添加属性),对于“未排序”选项,对该属性进行排序
例如,您可以添加
originalIndex
属性:然后
myArr = _.sortBy(myArr, "originalIndex");
将返回原始订单 ._.sortBy
创建了一个副本),并在需要"unsorted"版本时再次使用原始数组您可以使用创建原始副本:
您可以在排序后使用
oldArr
.Where are you getting the data from initially? (service)
如果它来自服务呼叫 - 建议只需重新调用该服务并将数据设置为等于再次检索的数据 .
如果您不想再次调用该服务,只需在JS sortingData和unsortedData中创建两个对象 . 然后,当您使用lodash方法时,只需将其应用于sortingData数组 . 在第三次点击,做
Where are you getting the data from initially? (manually created)
这里有两个对象的相同方法 . 创建数据后,在允许完成排序之前,将unsortedData设置为您生成的数据 . 例如