Javascript 搜索/排序多维数组
我已经根据圆周长的x/y坐标创建了一个多维数组。可以沿弧拖动对象(在javascript中),然后将其“拖放”到任意位置。问题是,我需要找到与对象“放置”位置最近的x和y坐标 我目前的解决方案是在数组中循环找到最接近x的值,然后再次循环找到y坐标,但它看起来不是很干净,而且存在问题 有人有什么建议吗Javascript 搜索/排序多维数组,javascript,multidimensional-array,Javascript,Multidimensional Array,我已经根据圆周长的x/y坐标创建了一个多维数组。可以沿弧拖动对象(在javascript中),然后将其“拖放”到任意位置。问题是,我需要找到与对象“放置”位置最近的x和y坐标 我目前的解决方案是在数组中循环找到最接近x的值,然后再次循环找到y坐标,但它看起来不是很干净,而且存在问题 有人有什么建议吗 谢谢 如果数组是按顺序创建的(即从最小到最大或从最大到最小),则可以使用引入二进制搜索算法 获取x数组的中间元素 如果x等于你的值,停下来寻找y,否则。 如果x较低,则搜索数组的下半部分(从步骤1开
谢谢 如果数组是按顺序创建的(即从最小到最大或从最大到最小),则可以使用引入二进制搜索算法
然后在y上使用相同的公式。您可能需要对算法进行一些更改,使其与最接近的匹配元素一起工作。由于没有看到您的数组,我无法提供解决此问题的代码。所以,让我们看看。我们假设一组预定义的(x,y)坐标。您将获得另一个点,并且必须找到距该点最近的数组元素。我假设“最近的”是指从给定点到其他点的最小毕达哥拉斯距离或欧几里德距离 最简单的算法可能是最好的(如果你想在中查看其他算法,请查看它)。由于您没有为结构提供任何代码,我将假设一个对象数组,每个对象都有一个
x
和一个y
属性,对于给定的点也是如此
var findNearestPoint = function (p, points) {
var minDist = Number.POSITIVE_INFINITY,
minPoint = -1,
i,
l,
curDist,
sqr = function(x) { return x * x; };
for (i = 0, l = points.length; i < l; i++) {
curDist = sqr(p.x - points[i].x) + sqr(p.y - points[i].y);
if (curDist < minDist) {
minDist = curDist;
minPoint = i;
}
}
return points[i];
};
var findNearestPoint=函数(p,点){
var minDist=数字。正无穷大,
minPoint=-1,
我
L
宵禁者,
sqr=函数(x){返回x*x;};
对于(i=0,l=points.length;i
(未经测试,但你明白了。)你可以尝试使用角度,并使用sin和cos找出X和Y。数组中的X和Y坐标是否均匀分布?@OmerPT,我已经计算出了角度,谢谢。@Jeremy,你说的“X和Y坐标均匀分布吗?”@Michael,我会发布我的代码,但我认为没有必要(而且有点长)。:)我只是希望有人知道如何从数组中检索最近的[x,y]值。这可能是一个高层次的解释…基本上,我只是想知道替代方案是什么。假设你有一个500x500像素的正方形,你有一个6x6数组,其中每个点相距100像素,即(0,0),(0100),(0200),等等。然后你可以轻松地计算出最接近的一个,而不必迭代数组。MillsJROSS,非常感谢您的回复,非常有帮助!boyetboy,想对上面的回复表示感谢,它给了我代码的方向…非常感谢!