如何通过与n-1比较对数组进行排序

时间:2016-08-30 23:50:10

标签: javascript arrays sorting

我在javascript中遇到这个问题:我有很多随机地图坐标(纬度,经度)存储在数组中

var coordinates = [
[64,22],[55,33],[28,35],[...,...]
]

我还有一种方法可以计算其中两个点之间的距离

var getDistance =function(point1,point2)
    {
    return L.dist(point1,point2);//leaflet method
    }

然后这是我的问题:

如何对我的数组进行排序,使距离从第一个坐标最近排序,然后最接近第二个,然后最接近第三个,然后最接近第四个......?任何人都有这个解决方案......我迷失了:(

编辑1:

我尝试用嵌套for循环来解决问题...但结果似乎是错误的。

var cloestIndex = 1;
var closestDistance = 99999999;

     for (var i = 0; i < coords.length; i++) {
         for (var j = i + 1; j < coords.length; j++) {
             if ((Map().distance(coords[i], coords[j]) < closestDistance) &&
                                (Map().distance(coords[i], coords[j]) != 0){

                  closestDistance = (Map().distance(coords[i], coords[j]));

                            closestIndex = j;
                  }
               }
           console.log("CD", closestDistance + "(" + closestIndex + ")");
           finalArray.push(coords[closestIndex]);
           coords.splice(closestIndex, 0);
           cloestDistance = 9999999;
      }

1 个答案:

答案 0 :(得分:1)

  

如何对我的数组进行排序,使距离从第一个坐标开始排序,然后从第一个坐标到第二个坐标,然后是cloest到第三个,然后是cloest到第四个......?

这不称为“排序”,因为“与之前的”的最近距离不是ordering。按距离对单个点进行排序将是。

所以要做你想做的事,你真的应该按照你的描述,首先把第一个坐标放在结果数组中,然后在其余部分找到最接近的那个并添加它,然后找到最接近的 - 等等,直到没有更多的坐标。