繁体   English   中英

Javascript:从数组中获取连续的天数?

[英]Javascript: Getting consecutive days from an array?

我有一组 ISO 日期, ["2019-09-10", "2019-09-14", "2019-09-11", "2019-09-22","2019-09-25"]; 我试图找到返回成对对象数组的最佳方法。 例如:

let results: [
   {start: 2019-09-10, end: 2019-09-11},
]

我尝试使用毫秒进行比较,但它似乎也在同一天返回, {start: 2019-09-11, end: 2019-09-11}

一种方法是首先按日期对元素进行排序,然后将它们成对比较以查看它们是否连续。 在下面的示例中,我使用date-fns来解析它们并使它们更容易进行比较,但是您可能没有它也可以。

真正的关键要点是对元素进行排序,然后对它们进行归约。 reducer function 可以接受的不仅仅是accumulatorcurrentValue 您还可以获得索引和正在迭代的数组。 后两者使查找下一个元素变得容易,并比较它以查看是否应将某些内容添加到accumulator中。

const addDays = require('date-fns/addDays')
const parse = require('date-fns/parseISO')

const dates = ["2019-09-10", "2019-09-14", "2019-09-11", "2019-09-22","2019-09-25"]

//First, we map them to date objects, and sort the new list.
const sorted = dates.map(d => parse(d)).sort((a,b) => a-b)

//Then we reduce over the entire list, checking pairwise for the dates to be consecutive
const pairs = sorted.reduce((pairs, start, i, dates) => {
  const end = dates[i+1]
  if (addDays(start, 1)-end === 0) pairs.push({start, end})
  return pairs
}, [])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM