【问题标题】:How can sort an array by comparing to n-1如何通过比较 n-1 对数组进行排序
【发布时间】:2017-01-07 09:38:36
【问题描述】:

我在 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;
      }

【问题讨论】:

  • 你是说排序前的第一个元素在排序后仍然应该是第一个,但其他元素应该重新排列以形成所有点之间的最短总路径?或者您是否想找到彼此最接近的两个元素并将它们设为结果中的前两个?如果是后者,如果最短距离在 A 点和 B 点之间,而第二最短距离在 D 点和 E 点之间呢?
  • 排序时“最接近第n个”是什么意思?
  • 请遵循基本的国际英语标准。句子的第一个字母大写。 “我”这个词是大写的。我们用撇号书写诸如“I'm”之类的缩写词。另外,请正确缩进您的代码。拼写检查您的帖子;例如,正确的拼写是“closest”,而不是“cloest”。粘贴您正在使用的实际代码;带有无效关键字retrun 的代码甚至不会运行,并且函数(不是方法)定义必须以function 关键字开头。这不是聊天频道或短信对话。
  • @torazaburo 我编辑了,我的错。

标签: javascript arrays sorting


【解决方案1】:

如何对我的数组进行排序,以使距离从第一个坐标按最近排序,然后从最近到第二,然后从最近到第三,然后从最近到第四...?

这不称为“排序”,因为“与上一个最近的距离”不是ordering。按到单个点的距离对它们进行排序。

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

【讨论】:

  • 但是最近的坐标可能是之前添加的某个坐标,注入重复项,需要某种控制,我错了吗?
  • @JoseHermosillaRodrigo:是的,当然。这就是为什么我写了“find ... in the rest, ...直到没有其他人留下来”。
  • 是的。没想到这么多,抱歉!! :)
  • 你的新年决心不回答写得不好的问题,OP 永远不会回来澄清或回应 cmets/answers,发生了什么?
  • @torazaburo 这可能看起来有点词穷,但我发现它写得很好,可以回答。我不知道 OP 是否会回来,而 cmets 基本上只是指出与我的回答相同的问题(实际上我的回答是从评论开始的)。但可以肯定的是,这个问题需要有更高的质量才能通过成熟的实现得到答案……
猜你喜欢
  • 2015-10-07
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多