我有以下

    var dates = [
        "2017-09-11 13:30:45",
        "2017-09-11 14:20:00",
        "2017-09-11 15:00:00"
        ]


我要删除中间日期,因为它与上一个日期太近(不到一小时)。一旦删除,第三个应该留在那里,因为它与上一个(它现在是第一个)不太接近

我知道如何转换日期,我知道如何进行基本的for循环以查找要删除的日期,并且我知道如何删除日期。

我的问题是:有没有班轮可以为我解决这个问题?我正在翻阅Lodash,但找不到任何

说明:

数组总是排序的。该功能应对照前一个元素验证当前元素。如果当前元素被删除,则下一个元素应与被删除的元素进行比较

最佳答案

不是单线的,但时间不长:

let lastDate = null;
dates = dates.filter(date => {
  date = parseDate(date);
  if (!lastDate || date - lastDate >= ONE_HOUR) {
    lastDate = date;
    return true;
  }
});




let dates = [
    "2017-09-11 13:30:45",
    "2017-09-11 14:20:00",
    "2017-09-11 15:00:00"
    ];
const ONE_HOUR = 1000 * 60 * 60;
let lastDate = null;
dates = dates.filter(date => {
  date = parseDate(date);
  if (!lastDate || date - lastDate >= ONE_HOUR) {
    lastDate = date;
    return true;
  }
});
console.log(dates);

function parseDate(s) {
  return Date.parse(s.replace(' ', 'T'));
}

07-24 18:14