lodash比较数组中的对象,并根据此比较创建新对象

时间:2020-04-28 00:45:29

标签: javascript momentjs lodash

我有一个对象数组,格式如下:

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" },
  ],
];

我正在使用moment.js查找两个日期之间的差异。

1 个答案:

答案 0 :(得分:0)

您可以使用原始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);

相关问题