如何在Javascript中基于动态范围确定值

How to determine a value based on dynamic ranges in Javascript

本文关键字:动态 范围 Javascript 于动态      更新时间:2023-09-26

有没有一种聪明的方法来确定(比如数组索引)是否在给定范围内?该应用程序类似于单个视频文件的播放列表,其中包含一组表示"章节"的从/到时间
即章节:

00:01 - 00:30 : Call To Order
00:31 - 00:45 : Pledge of Allegence
00:46 - 02:25 : Opening Remarks
02:26 - 32:07 : Old Business
etc., etc., etc.

我在页面上有这些项目的列表,当播放器通过返回当前时间戳来报告它当前在视频中的播放位置时,我需要使用jQuery来突出显示当前视频时间戳所在的"章节"的LI。因此,如果视频目前是1:15,那就是"开场白",第三个列表项目将突出显示。

我尝试了很多方法,但最终使用PHP编写了一系列庞大的IF/ELSE,因为播放列表中可能有5到100个不同的章节,用户可以随时修改。

理想情况下,我想要一个数组,使用Start time作为Key,使用chamber作为值,以及一个返回第一个索引的函数,该索引>=当前时间戳。有什么聪明的方法可以做到这一点吗?我的方式"有效",但天哪,它效率低下,每秒运行100次。

附言:我应该提到,所有的值实际上都是以秒为单位的,为了清楚起见,这个问题使用了H:M:S。最后,我试图了解如果数组索引在给定范围内,如何选择它。

类似这样的东西:

var chapters = {
    1: "callToOrder",
    31: "pledgeOfAllegiance",
    46: "openingRemarks",
    146: "oldBusiness", 
}
function currentChapter(seconds) {
    var start, found = Infinity;
    for (start in chapters) {
        if (start <= seconds && start < found) {
            found = start;
        }
    }
    return (found === Infinity) ? null : chapters[found];
}

它将以线性时间运行的章节数。在实践中,这应该是可以接受的。如果不是,那么您可以用对象数组替换chapters,并执行二进制搜索。