loda sh сравнивает объекты в массиве и создает новый объект на основе этого сравнения - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть массив объектов в следующем формате:

var res = [
  { StartTime: "04/29/2020 13:30", Status: "free" },
  { StartTime: "04/29/2020 14:00", Status: "free" },
  { StartTime: "04/29/2020 14:30", Status: "free" },
  { StartTime: "04/29/2020 15:00", Status: "free" },
  { StartTime: "04/29/2020 20:00", Status: "free" },
  { StartTime: "04/29/2020 20:30", Status: "free" },
];

Теперь я хочу создать объект, который разделит этот массив объектов на 2 массива объектов таким образом, что если StartTimes имеют В течение 30 минут они могут оставаться вместе, и если нет, я перейду к созданию нового массива, который будет выглядеть так:

var res = [
  [
    { StartTime: "04/29/2020 13:30", Status: "free" },
    { StartTime: "04/29/2020 14:00", Status: "free" },
    { StartTime: "04/29/2020 14:30", Status: "free" },
    { StartTime: "04/29/2020 15:00", Status: "free" },
  ],
  [
    { StartTime: "04/29/2020 20:00", Status: "free" },
    { StartTime: "04/29/2020 20:30", Status: "free" },
  ],
];

Я использую момент. js, чтобы найти разницу между 2 даты.

1 Ответ

0 голосов
/ 28 апреля 2020

Вы можете сделать это в ванили JavaScript, что-то вроде:

var res = [
  { StartTime: "04/29/2020 13:30", Status: "free" },
  { StartTime: "04/29/2020 14:00", Status: "free" },
  { StartTime: "04/29/2020 14:30", Status: "free" },
  { StartTime: "04/29/2020 15:00", Status: "free" },
  { StartTime: "04/29/2020 20:00", Status: "free" },
  { StartTime: "04/29/2020 20:30", Status: "free" },
];

let j = 0, result = [], previous;
for (let i = 0; i < res.length; i++) {
  let current = new Date(res[i].StartTime);
  if (previous && current.getTime() - previous.getTime() > 30 * 60 * 1000) j++;
  (result[j] = result[j] || []).push(res[i]);
  previous = current;
}

console.log(result);
...