javascript - 如何在javascript中合并连续的日期?

标签 javascript arrays momentjs

我有一个日期数组,例如:

test = [ '2018-07-18', '2018-07-19', '2018-07-21', '2018-07-23', '2018-07-24', '2018-07-26'];

我想像这样返回一个由连续日期的子数组组成的数组:

result = [['2018-07-18', '2018-07-19'], ['2018-07-21'], ['2018-07-23', '2018-07-24'], ['2018-07-26']]

我正在尝试编写一段代码:

const moment = require('moment');
let visited = [];
const alpha = test.reduce((accumlator, current_date, current_index, array) => {
    let start_date = current_date;
    let successive_date = array[current_index + 1];
    visited.push(start_date);
    if(successive_date && moment(successive_date).diff(moment(start_date), 'days') === 1  
        && visited.includes(successive_date) === false) {
        accumlator.concat(start_date);
        accumlator.concat(successive_date);
    }
    if(successive_date && moment(successive_date).diff(moment(start_date), 'days') !== 1  
        && visited.includes(successive_date) === false) {
        accumlator.concat(successive_date);
    }
    return accumlator;
}, []);

console.log('alpha: ', alpha);

使用 concat 时的结果是:

alpha: []

我使用了 push(),它返回了一个数组,例如 test:

alpha:  [ '2018-07-18','2018-07-19','2018-07-21','2018-07-23','2018-07-23','2018-07-24''2018-07-26' ]

我怎样才能解决这个问题以获得如上所述的结果?

最佳答案

你可以试试:

test.reduce((acc, date) => {
  const group = acc[acc.length - 1];
  if (moment(date).diff(moment(group[group.length - 1] || date), 'days') > 1) {
    acc.push([date])
  } else {
    group.push(date);
  }
  return acc;
}, [[]])

输出:

[
  [
    "2018-07-18",
    "2018-07-19"
  ],
  [
    "2018-07-21"
  ],
  [
    "2018-07-23",
    "2018-07-24"
  ],
  [
    "2018-07-26"
  ]
]

关于javascript - 如何在javascript中合并连续的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51420051/

相关文章:

javascript - 从嵌套对象的属性生成代码字符串

c# - 获取数组长度

javascript - 尝试使用时刻库​​时间戳来理解 Javascript 中的 map

javascript - 获取值列表在数组中存在不止一次

javascript - 如何在一个时钟内定位这些数字?

javascript - 下划线 - 使用 _.map() 转换数组

JavaScript 数组 - 循环后所有超过 0 的索引均为空

javascript - moment.js 未在 Firefox 扩展中的 chart.js 之前加载

javascript - 如何使用moment.JS针对某个时区并实时显示

javascript - 当属性不一致时,如何根据属性对 JS 对象列表进行排序