Javascript 根据给定的数字范围在对象数组中搜索的最佳方法

Javascript 根据给定的数字范围在对象数组中搜索的最佳方法,javascript,ecmascript-6,Javascript,Ecmascript 6,例如,我们有一个数组,如 var arr = [{'startTime': 0, 'endTime': 2}, {'startTime': 1, 'endTime': 3}, {'startTime': 4, 'endTime': 9}, {'startTime': 5, 'endTime': 9}, {'startTime': 7, 'endTime': 13}, {'startTi

例如,我们有一个数组,如

var arr = [{'startTime': 0, 'endTime': 2}, 
           {'startTime': 1, 'endTime': 3},
           {'startTime': 4, 'endTime': 9},
           {'startTime': 5, 'endTime': 9},
           {'startTime': 7, 'endTime': 13},
           {'startTime': 20, 'endTime': 25},
           {'startTime': 27, 'endTime': 32},
           {'startTime': 30, 'endTime': 35},
          ]
这个数组可以是任意长度的,现在如果需要8作为当前时间的结果,那么我们需要搜索范围内8所在的所有项目。所以结果将会是

           [{'startTime': 4, 'endTime': 9},
           {'startTime': 5, 'endTime': 9},
           {'startTime': 7, 'endTime': 13},]
在阵列上以最小迭代次数搜索此项的最佳方法是什么?

尝试这样做

var arr=[{'startTime':0,'endTime':2},
{'startTime':1,'endTime':3},
{'startTime':4,'endTime':9},
{'startTime':5,'endTime':9},
{'startTime':7,'endTime':13},
{'startTime':20,'endTime':25},
{'startTime':27,'endTime':32},
{'startTime':30,'endTime':35},
];

log(arr.filter((项,索引)=>(项.startTime=8))
您可以使用
过滤器
过滤数组:

var arr=[{'startTime':0,'endTime':2},
{'startTime':1,'endTime':3},
{'startTime':4,'endTime':9},
{'startTime':5,'endTime':9},
{'startTime':7,'endTime':13},
{'startTime':20,'endTime':25},
{'startTime':27,'endTime':32},
{'startTime':30,'endTime':35},
]

log(arr.filter(el=>el.startTime<8&&el.endTime>8))
您可以通过以下谓词实现这一点:

item => item.startTime <= value && value <= item.endTime

下面是javascript中二进制搜索树的实现。你可以查一下

数组是否以任何方式排序?您的示例具有递增的开始时间,除非数组包含数百万个条目,并且您必须尽可能每毫秒保存一次,只需使用
.filter()
@Meir是的,我们已根据开始时间对数组进行排序。@Andreas我们需要检查每毫秒,数据将以百万为单位。在这种情况下,filter()不是一个好的选择。对吗?如果有数百万个这样的对象,就不应该在客户机上完成。由于我们正在筛选,您可以将数组分块到x元素的一部分,并在服务器上并行筛选所有元素。最坏的情况是,用一堆web工作者来执行相同的客户端,而不是额外的子进程“这确实是编写这样的条件的最佳方式,因为缺少python的
start
filter将检查数组中的所有项,我需要使用二进制搜索或任何其他方法最小化对最小可能项的迭代。它不会迭代数组中的所有项吗?我需要迭代数组中可能存在的最小值,因为这个数组可能有数千项,并且需要每秒检查一次。