Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 搜索/排序多维数组_Javascript_Multidimensional Array - Fatal编程技术网

Javascript 搜索/排序多维数组

Javascript 搜索/排序多维数组,javascript,multidimensional-array,Javascript,Multidimensional Array,我已经根据圆周长的x/y坐标创建了一个多维数组。可以沿弧拖动对象(在javascript中),然后将其“拖放”到任意位置。问题是,我需要找到与对象“放置”位置最近的x和y坐标 我目前的解决方案是在数组中循环找到最接近x的值,然后再次循环找到y坐标,但它看起来不是很干净,而且存在问题 有人有什么建议吗 谢谢 如果数组是按顺序创建的(即从最小到最大或从最大到最小),则可以使用引入二进制搜索算法 获取x数组的中间元素 如果x等于你的值,停下来寻找y,否则。 如果x较低,则搜索数组的下半部分(从步骤1开

我已经根据圆周长的x/y坐标创建了一个多维数组。可以沿弧拖动对象(在javascript中),然后将其“拖放”到任意位置。问题是,我需要找到与对象“放置”位置最近的x和y坐标

我目前的解决方案是在数组中循环找到最接近x的值,然后再次循环找到y坐标,但它看起来不是很干净,而且存在问题

有人有什么建议吗


谢谢

如果数组是按顺序创建的(即从最小到最大或从最大到最小),则可以使用引入二进制搜索算法

  • 获取x数组的中间元素
  • 如果x等于你的值,停下来寻找y,否则。
  • 如果x较低,则搜索数组的下半部分(从步骤1开始)
  • 如果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,想对上面的回复表示感谢,它给了我代码的方向…非常感谢!