簡體   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