首页 文章

JavaScript - 撤消数组的排序

提问于
浏览
0

我正在制作一张可分类的 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 回答

  • 2

    你基本上有三个选择:

    • 不提供“未分类”选项

    • 记住原始订单(可能通过为其添加属性),对于“未排序”选项,对该属性进行排序

    例如,您可以添加 originalIndex 属性:

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

    然后 myArr = _.sortBy(myArr, "originalIndex"); 将返回原始订单 .

    • 将原始数组保留在某处(因为 _.sortBy 创建了一个副本),并在需要"unsorted"版本时再次使用原始数组
  • 1

    您可以使用创建原始副本:

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

    您可以在排序后使用 oldArr .

  • 0

    Where are you getting the data from initially? (service)

    如果它来自服务呼叫 - 建议只需重新调用该服务并将数据设置为等于再次检索的数据 .

    如果您不想再次调用该服务,只需在JS sortingData和unsortedData中创建两个对象 . 然后,当您使用lodash方法时,只需将其应用于sortingData数组 . 在第三次点击,做

    sortingData = unsortedData;
    

    Where are you getting the data from initially? (manually created)

    这里有两个对象的相同方法 . 创建数据后,在允许完成排序之前,将unsortedData设置为您生成的数据 . 例如

    unsortedData = data;
    

相关问题