Nodejs-根据时间戳属性对大型数组对象进行分组



我有一个数组,里面有大量的对象(大约200k到1M个条目(。每个对象看起来像这样:

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
}
}

我每10秒就有这些物体,我需要把它们按一个时间分组,单位如下:

  • 1分钟=60000毫秒
  • 5分钟=300000毫秒
  • 15分钟=900000毫秒
  • 1小时=3600000毫秒

因此,基本上我需要将原始数组转换为数组的数组,其中该数组的第一个元素将是一个包含该范围内对象的数组(在示例中使用5分钟作为时间单位(:

[[first_object_timestamp, first_object_timestamp + 300000], [first_object_timestamp + 30000,first_object_timestamp + 600000]]

如果更容易的话,您可以将数组转换为一个具有datamap属性的单个对象,该属性具有值的平均值,因为无论如何我都必须这样做。

有一些事情会使您的场景变得复杂:

  • 具有日期localcol属性的对象
  • 需要将日期解析为数字格式

为了简单起见,我的回答假设以下内容:

  • 这只是一个数字数组。不是对象数组。您可以修改此示例以适应您的场景
  • 时间按升序排列

const groupInterval = 5
const times = [2, 3, 4, 5, 8, 14, 15, 18, 53, 402, 403]
const result = []
for (let i = 0; i < times.length;) {
// Get starting time of group
const firstTimeInGroup = Math.floor(times[i] / groupInterval) * groupInterval
const group = []
for (; times[i] < firstTimeInGroup + groupInterval; i++) {
group.push(times[i])
}
result.push(group)
}
console.log(result)

最新更新