javascript按位置排序json的位置

时间:2018-05-06 10:31:37

标签: javascript

我试图找到最近的三个位置并在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);
}

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

你可以使用sort()函数。

首先,制作一个数组。 var elements = [];

第二,用json值填充数组

element.unshift({位置:姓名,DIST:距离});

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]; //最近的地方名称。(数组)

------- --------端 如果您有任何疑问,请问我。

P.S。使用Math.hypot();而不是Math.sqrt(); // Math.hypot更快,但遗留浏览器没有

答案 1 :(得分:0)

我的一个朋友能够帮助我。这是适合我的代码:

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;

    //Annahme: Maximal drei Attraktionen
    for (var i = 0; i < locations.length; i++) {
        var location = locations[i];
        locationLng = location[2];
        locationLat = location[1];
        dx = 71.5 * (currentLng - locationLng);
        dy = 111.3 * (currentLat - locationLat);
        distance = Math.sqrt(dx * dx + dy * dy);

        location.push(distance);
        var output = "";
        output += distance.toString();
    }

    console.log(locations);

    locations.sort(function (a, b) {
        return a[8] - b[8];
    });

    console.log(locations);

    //Fuer Uebung 5c: Speichern der aktuellen Position und naechsten Attraktion im localStorage
    localStorage.setItem('currentLat', currentLat);
    localStorage.setItem('currentLng', currentLng);
    localStorage.setItem('locationID', locationID);
    showLocation();
}