时间区间特定数据展示逻辑异常排查及修正请求
时间区间数据展示逻辑修正问题
需求与预期输出
需求为按时间区间展示对应特定数据,预期输出如下:
12:00:00 - 13:00:00 -> should display 1 (In the log, timestamp 12:00:00 has data as "1", All lines from 12:00:00 until 13:00:00 should display 1. But has to change at 13:00:00, as timestamp 13:00:00 has new data which is "5") 13:00:00 - 14:00:00 -> should display 5 (13:00:00 line has data as 5) 14:00:00 - 15:00:00 -> should display 7 (14:00:00 line has data as 7)
当前代码与异常情况
当前使用的判断逻辑:
eachTBData.TimeStamp >= this.x
实际输出异常:
Correct data is not shown (Maps and displays in the previous set instead) 12:00:00 - 13:00:00 -> this set displays 5 (has to display 1) 13:00:00 - 14:00:00 -> this set displays 7 (has to display 5)
尝试将代码修改为eachTBData.TimeStamp <= this.x后,所有时间区间均显示初始数据“1”,问题仍未解决。
修正逻辑方案
核心问题是需要为每个时间区间匹配对应起始时间点的最新数据,具体实现步骤:
- 先确保所有带时间戳的数据按时间升序排列(未排序需先做排序处理)
- 对于每个时间区间
[intervalStart, intervalEnd),找到满足eachTBData.TimeStamp <= intervalStart的所有数据中,时间戳最大的那一条
基础遍历实现(伪代码)
// 假设dataList已按TimeStamp升序排序 function getDisplayData(intervalStart, dataList) { let targetData = dataList[0]; for (let data of dataList) { if (data.TimeStamp <= intervalStart) { targetData = data; // 更新为符合条件的最新数据 } else { break; // 已排序,后续时间戳更大,无需继续遍历 } } return targetData.value; }
二分查找实现(数据量大时更高效)
function findLatestData(intervalStart, dataList) { let left = 0; let right = dataList.length - 1; let result = dataList[0]; while (left <= right) { const mid = Math.floor((left + right) / 2); if (dataList[mid].TimeStamp <= intervalStart) { result = dataList[mid]; left = mid + 1; // 尝试找更晚的符合条件的时间戳 } else { right = mid - 1; } } return result.value; }
通过以上逻辑,每个区间就能正确匹配对应数据:
- 12:00:00-13:00:00 取12:00:00的数据(1)
- 13:00:00-14:00:00 取13:00:00的数据(5)
- 14:00:00-15:00:00 取14:00:00的数据(7)
内容的提问来源于stack exchange,提问作者st27
相关产品推荐
相关产品推荐

