按日期键排序Javascript数组

时间:2017-05-02 20:06:58

标签: javascript arrays sorting

我有一个javascript循环,它迭代数据库中的一些注释并将它们连接成一个字符串以附加到DOM。它使用noteType作为键,因此我可以在多个选项卡上分隔不同类型的注释。

问题是,我需要显示按日期排序的所有笔记的组合视图。在循环结束时,我将笔记附加到我称为combinedOutput的单独变量中。每个音符类型的音符都在正确的日期顺序中。但是,当需要将它们全部组合为一个时,将按照各自的顺序追加两组正确排序的数组,并在最终输出中抛出日期顺序。

以下是我的代码示例:

// Define our vars
var output = [],
    combinedOutput = [],
    noteType = '',
    noteDate = new Date;

$(data).find('notes>data').each(function() {

    var $p = $(this);

    noteType = $p.find('noteType').text(),
    noteDate = moment.utc($p.find('timestampOrig').text()).toDate()

    if (typeof(output[noteType]) == 'undefined') {
        output[noteType] = "";
    }
    if (typeof(combinedOutput[noteDate]) == 'undefined') {
        combinedOutput[noteDate] = new Date;
    }

    // Create our note
    output[noteType] += '<div id="message_' + $p.find('recordID').text() + '" class="panel panel-default custom-panel item">';
    output[noteType] += 'Something Here';
    output[noteType] += '</div>';

    // Append to our final output variable
    combinedOutput[noteDate] += output[noteType];

});

日期示例

**Note Type: Public**
April 1, 2017
March 5, 2017
April 8, 2017

**Note Type: Private**
April 2, 2017
March 9, 2017
March 11, 2017

**Combined Notes:**
April 1, 2017
March 5, 2017
April 8, 2017
April 2, 2017
March 9, 2017
March 11, 2017

我的最终目标是按其密钥对combinedOutput进行排序,该密钥恰好是日期对象。

这是combinedOutput数组现在看起来如何没有排序的屏幕截图。 enter image description here

2 个答案:

答案 0 :(得分:2)

您可以使用Array.sort()方法。 传递一个函数,您可以指定如何比较值。 这里是排序方法的链接:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort?v=example

因此,在您的示例中,从数组中的服务器获取数据。然后你可以用这种方式订购它们:你的输出可以有这样的东西:

resultArray.sort(function(a, b) {
  var dateA = new Date(a.noteDate);
  var dateB = new Date(b.noteDate);

  if (dateA < dateB ) {
    return -1;
  }
  if (dateA > dateB ) {
    return 1;
  }
  return 0;
});

然后,在对数据进行排序后,重复您的过程以迭代它们并显示值。你应该已经订购了它们。

答案 1 :(得分:0)

这是Greate Answer

基本上使用sort()并在里面将日期转换为Date Objects并进行比较。该链接将向您展示如何完成此操作。如果您将一个日期对象添加到数组中的存储对象,那么这将是一种更快的排序,因此您不必在排序时构造和丢弃这么多对象。