You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel特定时间片段识别:筛选连续秒级有效信号强度记录

前端实现Excel时间连续记录筛选方案

针对你的10000行信号强度数据(首列为hh:mm:ss格式时间),以下是两种筛选需求的具体实现方案:

一、筛选至少连续6秒的有效记录

核心思路是先将时间转换为可计算的秒数,再识别连续的时间序列,最后过滤出时长达标片段。

步骤1:时间格式转总秒数

先写一个工具函数,把hh:mm:ss字符串转换成总秒数,方便后续计算:

function timeToSeconds(timeStr) {
  const [hours, mins, secs] = timeStr.split(':').map(Number);
  return hours * 3600 + mins * 60 + secs;
}

步骤2:识别连续时间组

假设你的原始数据是按时间顺序排列的(如果不是,先执行排序),遍历数据将连续的记录归为一组:

// 假设rawData是你的原始数据数组,每个元素结构为 { time: "00:00:01", signal: -52 }
const dataWithSeconds = rawData.map(item => ({
  ...item,
  totalSeconds: timeToSeconds(item.time)
}));

// 先排序(如果原始数据未按时间排序)
dataWithSeconds.sort((a, b) => a.totalSeconds - b.totalSeconds);

// 分组连续记录
const continuousGroups = [];
let currentGroup = [dataWithSeconds[0]];

for (let i = 1; i < dataWithSeconds.length; i++) {
  const prevItem = dataWithSeconds[i-1];
  const currItem = dataWithSeconds[i];
  // 根据实际采样间隔调整判断逻辑,这里默认采样间隔为1秒
  if (currItem.totalSeconds - prevItem.totalSeconds === 1) {
    currentGroup.push(currItem);
  } else {
    continuousGroups.push(currentGroup);
    currentGroup = [currItem];
  }
}
continuousGroups.push(currentGroup); // 加入最后一组

步骤3:筛选达标组

过滤出总时长≥6秒的组,合并后就是目标记录:

const validRecords = continuousGroups
  .filter(group => {
    // 计算组的总时长:最后一条记录秒数 - 第一条记录秒数
    const duration = group[group.length - 1].totalSeconds - group[0].totalSeconds;
    return duration >= 6;
  })
  .flat(); // 合并所有符合条件的组

二、筛选时长仅为6-8秒的连续记录

基于上面的连续分组逻辑,只需调整过滤条件即可:

const targetRecords = continuousGroups
  .filter(group => {
    const duration = group[group.length - 1].totalSeconds - group[0].totalSeconds;
    // 匹配6到8秒的区间(包含边界值)
    return duration >= 6 && duration <= 8;
  })
  .flat();

特殊情况说明

如果你的数据采样间隔不是1秒(比如0.5秒一条),只需修改连续组的判断逻辑(比如允许时间差≤0.5),时长计算逻辑保持不变即可。

内容的提问来源于stack exchange,提问作者Gregg Rosenstein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 11:10:51