我需要平移和缩放大量带有时间戳的数据。数据太多,无法将其全部绑定(bind)到 dom,否则浏览器会陷入困境。带时间戳的数据按从小到大的顺序排列。
因此,我们的想法是找到适合显示的 x 轴上的开始时间点和结束时间点之间的数据,并将其细化为浏览器可以处理的合理数量 N。
这可以通过将开始点和停止点之间的间隔划分为 N 个引用时间戳,然后在最接近每个引用的数据中找到时间戳来完成。
我可以对此进行编码,但可能不如现有解决方案那么有效。
是否有一个库(可能是交叉过滤器)可以做到这一点?
最佳答案
您有一个有序的数据数组,并且您正在搜索数据中的任意点。您的最佳搜索算法是二分搜索,它将在 O(log(n)) 时间内找到开始点和结束点的索引。
Underscore.js 具有二分搜索的实现:http://underscorejs.org/#indexOf
不了解交叉过滤器,但检查他们的范围过滤器。
一旦有了开始和结束索引,您就知道它们之间有多少个点。然后你就可以决定如何瘦身了。对于如何瘦身,没有一个正确的答案,这取决于数据和你讲述的故事。您可以对每个第 n 个点进行采样,可以平均或最大分区,或许多其他选项。
无论您如何选择细化,crossplot 都可以通过“分组”(例如,分成等宽分区)然后“减少”组来实现。
关于Javascript:如何从时间戳数组中查找时间间隔中的最大N个时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35355522/