Javascript:如何从时间戳数组中找到时间间隔内的最大N个时间戳

时间:2016-02-12 05:36:54

标签: javascript d3.js crossfilter

我需要平移和缩放大量带时间戳的数据。有太多的数据要将它全部绑定到dom,否则浏览器会陷入困境。带时间戳的数据按从最小到最大的顺序排列。

因此,我们的想法是找到适合显示的x轴上的开始和结束时间点的数据,然后将其减薄到合理的N量,以便浏览器处理。

这可以通过将起点和终点之间的间隔分成N个参考时间戳来完成,然后在最接近每个参考的数据中找到时间戳。

我可以编写代码,但可能没有现有解决方案那么有效。

是否有可以执行此操作的库(可能是crossfilter)?

1 个答案:

答案 0 :(得分:1)

您有一个有序的数据数组,并且您正在搜索数据中的任意点。您的最佳搜索算法是二进制搜索,它将在O(log(n))时间内找到起点和终点的索引。

Underscore.js有二进制搜索的实现:http://underscorejs.org/#indexOf

不了解crossfilter,但请检查其范围过滤器。

获得开始和结束索引后,您就知道它们之间有多少点。然后你可以决定如何瘦身。对于如何瘦身,没有一个正确的答案,这取决于您告诉的数据和故事。您可以对每个第n个点进行采样,可以对平均值或最大值进行采样,或者使用许多其他选项。

然而,你选择瘦身,交叉情节可以用"分组" (例如,进入等宽分区)然后"减少"团体。