[英]Javascript: Determining the number of consecutive days (streak) in an array
[英]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 可以接受的不僅僅是accumulator
和currentValue
; 您還可以獲得索引和正在迭代的數組。 后兩者使查找下一個元素變得容易,並比較它以查看是否應將某些內容添加到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.