Javascript:按两个属性搜索的对象索引集

Javascript:按两个属性搜索的对象索引集,javascript,search,indexing,Javascript,Search,Indexing,我应该为此使用什么数据结构/算法 我在笛卡尔网格上有大量点,位置由(x,y)指定。我想进行快速搜索,返回位于给定x和y范围内的点集(对象)。(网格中的矩形) 也许有一个轻量级的框架可以做到这一点 谢谢我会将这些点存储为具有两个属性的对象:x和y,以及一个比较函数,该函数使用剩余属性作为平分符,根据一个属性或另一个属性对它们进行排序: function Point(x, y){ this.x = x; this.y = y; this.compareTo =function

我应该为此使用什么数据结构/算法

我在笛卡尔网格上有大量点,位置由(x,y)指定。我想进行快速搜索,返回位于给定x和y范围内的点集(对象)。(网格中的矩形)

也许有一个轻量级的框架可以做到这一点


谢谢

我会将这些点存储为具有两个属性的对象:x和y,以及一个比较函数,该函数使用剩余属性作为平分符,根据一个属性或另一个属性对它们进行排序:

function Point(x, y){
    this.x = x;
    this.y = y;
    this.compareTo =function(otherPoint){
        if(otherPoint.x != this.x)
            return this.x-otherPoint.x;
        return this.y-otherPoint.y;
    }
}

points[n] = new Point(someX, someY);

然后,您可以使用排序算法(例如QuickSort-with O(n log(n)))对它们进行排序,并使用简单的插入排序,在点来去时保持它们的排序。当您需要使用矩形选择时,您只需在它们之间进行二进制搜索(O(log(n)),以查找第一个属性的边界(例如,
x
),然后再次在较小的集合中查找第二个属性的边界(例如,
y
),剩下的集合将是您要查找的,将搜索时间(O(4 log(n))设为最坏情况,将插入时间设为线性(最坏情况)。如果我自己这么说的话,也不算太糟糕。

以下是解决一般问题的最佳实现:


点区域四叉树?