这是我的基本问题:我得到了一个currentTime
. 例如,750 秒。我还有一个包含 1000 到 2000 个对象的数组,每个对象都有一个startTime
、endTime
和一个_id
属性。鉴于currentTime
,我需要找到具有 astartTime
并且endTime
在该范围内的对象——例如startTime : 740
, endTime : 755
。
在 Javascript 中执行此操作的最有效方法是什么?
对于初学者,我只是在做这样的事情:
var arrayLength = array.length;
var x = 0;
while (x < arrayLength) {
if (currentTime >= array[x].startTime && currentTime <= array[x].endTime) {
// then I've found my object
}
x++;
};
但我怀疑循环不是这里的最佳选择。有什么建议么?
编辑:为清楚起见,currentTime
必须属于startTime
andendTime
我的解决方案:我的数据结构为我提供了一些好处,使我能够稍微简化一些事情。正如建议的那样,我已经完成了基本的二进制搜索,因为数组已经按 startTime 排序。我还没有完全测试过这个东西的速度,但我怀疑它会快一点,尤其是对于更大的阵列。
var binarySearch = function(array, currentTime) {
var low = 0;
var high = array.length - 1;
var i;
while (low <= high) {
i = Math.floor((low + high) / 2);
if (array[i].startTime <= currentTime) {
if (array[i].endTime >= currentTime ){
// this is the one
return array[i]._id;
} else {
low = i + 1;
}
}
else {
high = i - 1;
}
}
return null;
}