javascript - объединить 2 массива даты - PullRequest
0 голосов
/ 04 сентября 2018

У меня проблема с DateTime в Javascript. Моя проблема в том, что у меня есть 2 массива 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},
];

После объединения двух списков результат будет:

result = [
    {start: 2018-08-28 00:00:00, end: 2018-08-28 03:00:00},
    {start: 2018-08-28 03:00:00, end: 2018-08-28 04:00:00},
    {start: 2018-08-28 04:00:00, end: 2018-08-28 06:00:00},
    {start: 2018-08-28 06:00:00, end: 2018-08-28 10:00:00},

    {start: 2018-08-28 11:00:00, end: 2018-08-28 11:30:00},

    {start: 2018-08-28 12:00:00, end: 2018-08-28 13:00:00},
    {start: 2018-08-28 13:00:00, end: 2018-08-28 14:00:00},
    {start: 2018-08-28 14:00:00, end: 2018-08-28 17:00:00},

    {start: 2018-08-28 20:00:00, end: 2018-08-28 22:00:00},
];

UPDATE:

Это проблема комбинирования, а не проблема сортировки. Например: с 1:00 до 3:00 в сочетании с 2:00 до 5:00 результат будет: [1:00 - 2:00, 2:00 - 3:00, 3:00 - 5:00] .

Если у вас есть идеи, пожалуйста, дайте мне знать.

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Теперь желательно использовать синтаксис ES6 для объединения двух массивов: Пример ниже

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);
});
0 голосов
/ 04 сентября 2018

Проблема здесь в том, что у вас есть дата , а не число или строка , поэтому сортировка не будет работать. Вы можете сделать строки ваши даты:

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)
0 голосов
/ 04 сентября 2018

Вы можете использовать Array.concat для объединения двух массивов, а затем пользовательский компаратор для их соответствующей сортировки.

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