如何在时间位置数组中匹配当前位置并获取对应索引?
解决时间区间索引判断问题
嘿,这个需求我之前做项目时也碰到过,核心就是把时间字符串转换成可直接比较的数值,剩下的区间判断就简单多了。我给你一步步拆解实现思路:
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
相关产品推荐
相关产品推荐

