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

如何在时间位置数组中匹配当前位置并获取对应索引?

解决时间区间索引判断问题

嘿,这个需求我之前做项目时也碰到过,核心就是把时间字符串转换成可直接比较的数值,剩下的区间判断就简单多了。我给你一步步拆解实现思路:

1. 先写个时间转秒数的辅助函数

要比较时间先后,首先得把"01:35"这种字符串格式的时间,转换成总秒数这种可量化的数值。这个辅助函数就能搞定:

function timeToSeconds(timeStr) {
  const [minutes, seconds] = timeStr.split(':').map(Number);
  return minutes * 60 + seconds;
}

比如"05:44"会被转换成5*60+44=344秒,"07:22"变成442秒,这样数值对比就毫无难度了。

2. 遍历数组定位目标区间

有了转秒函数,接下来就可以遍历你的播放列表,找到当前时间所在的区间:

const PLAYLIST = [{"position":"01:35"}, {"position":"05:44"}, {"position":"09:14"}, {"position":"12:00"}];
const currentPosition = "07:22";

function findCurrentIndex(playlist, currentTime) {
  const currentSec = timeToSeconds(currentTime);
  // 处理当前时间早于第一个节点的情况
  if (currentSec <= timeToSeconds(playlist[0].position)) {
    return 0;
  }
  // 遍历数组找匹配的区间
  for (let i = 1; i < playlist.length; i++) {
    const prevSec = timeToSeconds(playlist[i-1].position);
    const currSec = timeToSeconds(playlist[i].position);
    if (currentSec > prevSec && currentSec <= currSec) {
      return i - 1;
    }
  }
  // 处理当前时间晚于最后一个节点的情况
  return playlist.length - 1;
}

// 测试一下
console.log(findCurrentIndex(PLAYLIST, currentPosition)); // 输出1,完全符合你的需求!

逻辑说明

  • 先把当前时间转成秒数,优先判断是否早于第一个时间节点,直接返回索引0;
  • 从第二个节点开始遍历,对比当前时间与前后节点的秒数:如果落在两者之间,就返回前一个节点的索引;
  • 最后如果当前时间晚于所有节点,就返回最后一个节点的索引。

不管你的播放列表有多长,这个方法都能准确找到对应的区间索引~

内容的提问来源于stack exchange,提问作者Markus Hayner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:29:31