首页 > 解决方案 > javascript按距离对位置的json进行排序

问题描述

我正在尝试找到三个最近的位置并在 html ( https://snag.gy/zSL4pO.jpg ) 上显示信息。

我能够找到最近的位置,但我无法再进一步。在 Java 中,我会创建一个位置列表,然后按距离对它们进行排序。用javascript完成这项工作的最简单方法是什么?

当前功能:

function nearestLocation(position) {
    var myLocation;
    var currentLng = position.coords.longitude
    var currentLat = position.coords.latitude;
    var locationLng;
    var locationLat;
    var dx;
    var dy;
    var distance;
    var nearestAttraction = 15000; // ein extrem weit entfernter Ort (unrealistisch)

    var locationID = 0;
    for (var i = 0; i < 3; i++) {
        myLocation = locations[i];
        locationLng = myLocation[2];
        locationLat = myLocation[1];
        dx = 71.5 * (currentLng - locationLng);
        dy = 111.3 * (currentLat - locationLat);
        distance = Math.sqrt(dx * dx + dy * dy);
        if (distance < nearestAttraction) {
            nearestAttraction = distance;
            locationID = i;
        }
        console.log('Distance ' + i + ': ' + distance);
    }
    localStorage.setItem('currentLat', currentLat);
    localStorage.setItem('currentLng', currentLng);
    localStorage.setItem('locationID', locationID);
    showLocation(locationID, nearestAttraction);
}

谢谢你的帮助

标签: javascript

解决方案


您可以使用 sort() 函数。

首先,制作一个数组。变种元素=[];

二、用json值填充数组

element.unshift({location:name,dist:distance});

或者

element.unshift([name,distance]);//这样会更快

第三,对数组进行排序。

element.sort(function(a,b){return b.dist-a.dist;});//with object {}.

element.sort(function(a,b){return b[1]-a[1];});

第四,想用就用。

element[0].place;//最近地点的名称。(对象)

element[0][0];//最近地点的名称。(数组)

--------结束-------- 如果你有任何问题,问我。

ps 使用 Math.hypot(); 而不是 Math.sqrt();//Math.hypot 更快,但对于旧版浏览器没有


推荐阅读