js实现,一段时间内的log数据,取间隔1分钟、60分钟、120分钟的数据
时间: 2024-03-02 11:48:45 浏览: 24
假设你有一个 log 数组,里面存储了每条 log 的时间戳和内容,可以按照以下步骤实现取间隔 1 分钟、60 分钟、120 分钟的数据:
1. 将 log 数组按照时间戳从小到大排序。
2. 定义一个变量 lastMinute,初始化为 log[0] 的时间戳所在的分钟数;定义一个变量 lastHour,初始化为 log[0] 的时间戳所在的小时数。
3. 定义三个空数组 result1、result60、result120,分别用于存放取出的 1 分钟、60 分钟、120 分钟的 log 数据。
4. 遍历 log 数组,对于每条 log 数据:
- 计算该条数据时间戳所在的分钟数 minute 和小时数 hour。
- 如果 minute 与 lastMinute 不同,说明已经过了 1 分钟,将该条数据添加到 result1 数组中,并更新 lastMinute 为 minute。
- 如果 hour 与 lastHour 不同,说明已经过了 1 小时,将该条数据添加到 result60 和 result120 数组中,并更新 lastHour 为 hour。
5. 返回包含三个数组的对象,属性名为 interval1、interval60 和 interval120,对应 1 分钟、60 分钟和 120 分钟的间隔数据。
下面是实现代码示例:
```javascript
function getLogDataWithMultipleIntervals(log) {
// 1. 按时间戳从小到大排序
log.sort((a, b) => a.timestamp - b.timestamp);
// 2. 初始化 lastMinute、lastHour 和 result 数组
let lastMinute = Math.floor(log[0].timestamp / 60000);
let lastHour = Math.floor(log[0].timestamp / 3600000);
const result1 = [];
const result60 = [];
const result120 = [];
// 3. 遍历 log 数组
for (const entry of log) {
const minute = Math.floor(entry.timestamp / 60000);
const hour = Math.floor(entry.timestamp / 3600000);
if (minute !== lastMinute) {
// 4.1 如果已经过了 1 分钟,将该条数据添加到 result1 数组中
result1.push(entry);
lastMinute = minute;
}
if (hour !== lastHour) {
// 4.2 如果已经过了 1 小时,将该条数据添加到 result60 和 result120 数组中
result60.push(entry);
if (hour % 2 === 0) {
result120.push(entry);
}
lastHour = hour;
}
}
// 5. 返回包含三个数组的对象
return {
interval1: result1,
interval60: result60,
interval120: result120,
};
}
```