如何按间隔将数据分组到数组中

How to group data into arrays by intervals

所以我有一个大型数据数组,其中的对象如下所示:

Row {
  month_year_index: 'september_2019_2',
  localcol: 2019-09-13T00:52:16.847Z,
  datamap: {
    Curr1_mA: 769,
    Curr2_mA: 139,
    Curr3_mA: 0,
    P1_W: 75,
    P2_W: 0,
    P3_W: 0,
    P_Total_W: 75,
    U1N_Vx10: 2261,
    U2N_Vx10: 2330,
    U3N_Vx10: 2360
  }
}

使用以下代码,我设法使用 lodash groupBy 函数和 momentjs 按天对所有数据进行分组,这正是我想要的,它存储在一个数组数组中,每个数组都包含带有时间戳的所有对象(称为 localcol ) 有同一天。

queryAllPartitions().then((rowResults) => {
    console.log('Final Row Length', rowResults.length);

    let byDay = _.groupBy(rowResults, (result) => moment(result['localcol'], 'DD/MM/YYYY').startOf('day'));

    const groupInterval = 900000 // 15 min
    let byTimePeriod = [];

    const result = []
    for (let i = 0; i < Object.entries(byDay).length; i++) { // 30
        console.log("day", i)

        byTimePeriod[i] = []
        byTimePeriod[i] = _.groupBy((Object.entries(byDay)[i][1]), (result) => moment(result['localcol'], 'DD/MM/YYYY').startOf('minute'));
    }
}

我的问题是我必须像这样在特定时间再次对它们进行分组:

我可以使用 lodash 和 momentjs 按分钟和小时对它们进行分组,如下所示:

byTimePeriod[i] = _.groupBy((Object.entries(byDay)[i][1]), (result) => moment(result['localcol'], 'DD/MM/YYYY').startOf('minute'));

byTimePeriod[i] = _.groupBy((Object.entries(byDay)[i][1]), (result) => moment(result['localcol'], 'DD/MM/YYYY').startOf('hour'));

但我不知道如何为其他 2 个(5 分钟和 15 分钟)做。 我查看了 momentjs 上的文档:https://momentjscom.readthedocs.io/en/latest/moment/03-manipulating/03-start-of/ 但是在尝试了很多时间之后,我认为使用 startof 可能是不可能的,我必须使用不同的方法对它们进行分组。

本质上,startOf 函数将指定的日期字段设置为零。

要按 5 分钟分组,您必须获取当前分钟数并检查它们是否在正确的时间间隔内,为此您需要获取当前分钟数 / 5 * 5。

将 5 替换为 15,持续 15 分钟。

显然这个工作从0开始间隔:

  • 0-4 = 0
  • 5-9 = 5

等等

(result) => moment(result['localcol'], 'DD/MM/YYYY').minutes(Math.floor(moment(result['localcol'], 'DD/MM/YYYY').minutes() / 5) * 5);;
moment(date, 'DD/MM/YYYY').minutes(minutes);