我有一个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
进行排序,该密钥恰好是日期对象。
答案 0 :(得分:2)
您可以使用Array.sort()方法。 传递一个函数,您可以指定如何比较值。 这里是排序方法的链接:
因此,在您的示例中,从数组中的服务器获取数据。然后你可以用这种方式订购它们:你的输出可以有这样的东西:
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)
基本上使用sort()并在里面将日期转换为Date Objects并进行比较。该链接将向您展示如何完成此操作。如果您将一个日期对象添加到数组中的存储对象,那么这将是一种更快的排序,因此您不必在排序时构造和丢弃这么多对象。