如何根据Javascript中的动态范围确定值

时间:2014-04-17 13:46:16

标签: javascript

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

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&# 34;其中当前视频时间戳下降。因此,如果视频目前是1:15,则会突出显示"打开备注"和第3个列表项。

我尝试过多种方法,但最终使用PHP编写了大量的IF / ELSE,因为播放列表中可以包含5到100个不同的章节,并且可以由用户修改时间。

理想情况下,我喜欢使用开始时间作为键和章节作为值的数组,以及返回第一个索引> =当前时间戳的函数。有没有聪明的方法来实现这一目标?我的方式"工作",但是好上帝,它效率低,每秒10次,每次10次。

P.S。我应该提到所有值实际上都是以秒为单位,问题是使用H:M:S来表示清晰度。最后,我试图了解如何在给定范围内选择数组索引。

1 个答案:

答案 0 :(得分:0)

这样的事情:

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并执行二进制搜索。