JavaScript - 撤销对数组的排序

Nic*_*las 1 javascript arrays sorting lodash angular

我正在制作一个可排序的表格。表数据来自对象数组。我需要能够根据属性对数组进行排序

一个对象看起来像这样:

{
"AbsenceReservationID": 7220,
"Name": "DGM",
"Code": "ARBEIDSONGEVAL WP",
"RequestState": "Goedgekeurd",
"From": "2017-03-21T00:00:00+01:00",
}
Run Code Online (Sandbox Code Playgroud)

我正在使用lodash,因此我可以使用以下语法轻松对数组进行排序:

升序:

myArr = _.sortBy(myArr , "Name");
Run Code Online (Sandbox Code Playgroud)

描述:

myArr = _.sortBy(myArr , "Name").reverse;
Run Code Online (Sandbox Code Playgroud)

但是我坚持使用最后一种排序方法。我需要能够撤消排序,但我想不出一个好的方法来做到这一点。这是它的工作原理:

  • 第一次点击 - 按升序排序
  • 第二次点击 - 排序降序
  • 第 3 次单击 - 删除对此属性的排序

我认为困难的部分是当用户对多个属性进行排序时,例如

我怎样才能实现这种属性排序的删除?

T.J*_*der 6

你基本上有三个选择:

  1. 不要提供“未分类”选项

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

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

    _.forEach(myArr, function(e, i) { e.originalIndex = i; });
    
    Run Code Online (Sandbox Code Playgroud)

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

  3. 将原始数组保留在某处(因为_.sortBy创建了副本),并在需要“未排序”版本时再次使用原始数组


Jai*_*Jai 5

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

var oldArr = myArr.slice(); // gives you a new copy.
Run Code Online (Sandbox Code Playgroud)

整理后即可使用oldArr