javascript-加入2个日期数组

时间:2018-09-04 10:46:36

标签: javascript arrays datetime momentjs

我在Java语言中遇到 <table class="table table-bordered"> <h1 align="center">List of Science Book Records</h1> &nbsp; <thead> <tr> <th>Book Name</th> <th>Author Name</th> <th>Publish Date</th> </tr> </thead> <tbody class="mypanel"> <script> $.getJSON('https://openlibrary.org/subjects/science.json', function(data) { for (var i=0;i<data.length;i++) { console.log("hii"); var text = `<tr><td>${data.works[i].title}</td> <td>${data.works[i].authors[i].name}</td> <td>${data.name}</td></tr>` $(".mypanel").html(text); } }); </script> </tbody> </table> 的问题。我的问题是我有2个DateTime范围数组。例如:

DateTime

合并两个列表后,结果将是:

var list1 = [
    {start: 2018-08-28 00:00:00, end: 2018-08-28 04:00:00},
    {start: 2018-08-28 04:00:00, end: 2018-08-28 10:00:00},
    {start: 2018-08-28 12:00:00, end: 2018-08-28 14:00:00},
    {start: 2018-08-28 20:00:00, end: 2018-08-28 22:00:00},
];

var list2 = [
    {start: 2018-08-28 03:00:00, end: 2018-08-28 06:00:00},
    {start: 2018-08-28 11:00:00, end: 2018-08-28 11:30:00},
    {start: 2018-08-28 13:00:00, end: 2018-08-28 17:00:00},
];

更新:

这是一个组合问题,而不是排序问题。例如:从1:00-3:00与2:00-5:00相结合,结果将是:[1:00-2:00、2:00-3:00、3:00-5:00]

如果您有任何想法,请告诉我。

提前谢谢!

3 个答案:

答案 0 :(得分:0)

您可以使用Array.concat组合两个数组,然后使用自定义比较器对它们进行适当排序。

const output = list1.concat(list2).sort((a, b) => a.start - b.start);

答案 1 :(得分:0)

现在建议使用ES6语法来连接2个数组:下面的示例

result = [...list1, ...list2];
result.sort(function(a,b){
 // Turn your strings into dates and then subtract them
  // to get a value that is either negative, positive, or zero.
  return new Date(b.start) - new Date(a.start);
});

答案 2 :(得分:0)

这里的问题是您有一个日期,而不是数字字符串,这就是为什么排序不起作用的原因。您可以将字符串设置为日期:

var list1 = [
    {start: "2018-08-28 00:00:00", end: "2018-08-28 04:00:00"},
    {start: "2018-08-28 04:00:00", end: "2018-08-28 10:00:00"},
    {start: "2018-08-28 12:00:00", end: "2018-08-28 14:00:00"},
    {start: "2018-08-28 20:00:00", end: "2018-08-28 22:00:00"},
];

var list2 = [
    {start: "2018-08-28 03:00:00", end: "2018-08-28 06:00:00"},
    {start: "2018-08-28 11:00:00", end: "2018-08-28 11:30:00"},
    {start: "2018-08-28 13:00:00", end: "2018-08-28 17:00:00"},
];

var result = list1.concat(list2).sort((a, b) => new Date(a.start) - new Date(b.start));
console.log(result)