Javascript 按日期键对数组进行排序

SBB*_*SBB 3 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];

});
Run Code Online (Sandbox Code Playgroud)

日期示例

**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
Run Code Online (Sandbox Code Playgroud)

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

combinedOutput这是数组现在没有排序的 情况的屏幕截图。在此输入图像描述

qui*_*mmo 5

您可以使用 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;
});
Run Code Online (Sandbox Code Playgroud)

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