Javascript 从小到大构建有序列表

Javascript 从小到大构建有序列表,javascript,jquery,cordova,Javascript,Jquery,Cordova,我有以下硬编码的JSON: var myData = [ {"Identifier":1,"Naam":"Van Der Valk","Adres":"Europaweg 218","Postcode":"1238AC","Plaats":"Zoetermeer","Longitude":"4.48822","Latitude":"52.06258", "Status":"Laadpunten Beschikbaar", "lunch":"true", "d

我有以下硬编码的JSON:

 var myData = [
                  {"Identifier":1,"Naam":"Van Der Valk","Adres":"Europaweg 218","Postcode":"1238AC","Plaats":"Zoetermeer","Longitude":"4.48822","Latitude":"52.06258", "Status":"Laadpunten Beschikbaar", "lunch":"true", "diner":"true", "meet":"true", "wifi":"true"},
                  {"Identifier":2,"Naam":"NOT Given","Adres":"NOT Given 1","Postcode":"0000LL","Plaats":"Rotterdam","Longitude":"0.00000","Latitude":"0.00000", "lunch":"false"},
                  {"Identifier":3,"Naam":"NOT Given","Adres":"NOT Given 6","Postcode":"0000LL","Plaats":"Rotterdam","Longitude":"0.00000","Latitude":"0.00000", "lunch":"false"},
                  {"Identifier":4,"Naam":"NOT Given","Adres":"NOT Given 1","Postcode":"0000LL","Plaats":"Den Haag","Longitude":"0.00000","Latitude":"0.00000", "lunch":"false"},
                  {"Identifier":5,"Naam":"plek b met lunch en diner","Adres":"NOT Given 218","Postcode":"0000LL","Plaats":"Zoetermeer","Longitude":"0.00000","Latitude":"0.00000", "lunch":"true", "diner":"true", "wifi":"true"}
                  ];
我在ios phonegap应用程序中使用的json。。Json中的每一行代码都是荷兰的一个点。。我正在尝试构建一个函数,用于计算手机所在位置与json的lat和long之间的距离。。最终,这些json代码需要在一个有序的列表中出现,其中的距离也是从小到大

对于距离测量,我使用了以下方法:

 function haversine() {
            $.each(myData, function(index, element) {
                   var R = 6371; // earth's mean radius in km

                   var dLat  = rad(element.Latitude - lat1);


                   var dLong = rad(element.Longitude - long1);

                   var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
                   Math.cos(rad(lat1)) * Math.cos(rad(element.Latitude)) * Math.sin(dLong/2) * Math.sin(dLong/2);
                   var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
                   var d = R * c;

                   //var element = document.getElementById('afstand');
                   //element.innerHTML = 'afstand: ' + d.toFixed(3);

                   $('.greenfluxlist').append('<li id="' + element.Identifier + '"><a href="Details.html?id=' + element.Identifier + '" rel="external">' + element.Naam + ' ' + element.Plaats +  '<p> <br/>' + element.Adres + ',<br/> ' + element.Postcode + ' ' + element.Plaats + '<br/> Status: ' + element.Status +  '</p> <span class="ui-li-count">' + d.toFixed(3) + '</span></a></li>');
                   });

            $('.greenfluxlist').trigger('create'); 
            $('.greenfluxlist').listview('refresh');

            //return d.toFixed(3);

        }
函数haversine(){ $.each(myData、函数(索引、元素){ var R=6371;//地球的平均半径,单位为km var dLat=拉德(元素纬度-纬度1); var dLong=rad(element.Longitude-long1); 变量a=Math.sin(dLat/2)*Math.sin(dLat/2)+ Math.cos(rad(lat1))*Math.cos(rad(element.lation))*Math.sin(dLong/2)*Math.sin(dLong/2); var c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a)); var d=R*c; //var元素=document.getElementById('afstand'); //element.innerHTML='afstand:'+d.toFixed(3); $('.greenfluxlist').append('
  • ); }); $('.greenfluxlist')。触发器('create'); $('.greenfluxlist').listview('refresh'); //返回d.toFixed(3); } 我现在的问题是,如何构建有序列表,是否可以将所有内容都放入一个数组中,然后循环遍历它或其他内容,我认为必须有一个简单的解决方案,但我不知道。

    要对数组进行排序,请使用排序方法

    您应该首先计算距离,然后对数组排序,然后生成列表。大概是这样的:

    function calculateDistance(element)
    {
        var R = 6371; // earth's mean radius in km
    
        var dLat  = rad(element.Latitude - lat1);
        var dLong = rad(element.Longitude - long1);
    
        var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(rad(lat1)) * Math.cos(rad(element.Latitude)) * Math.sin(dLong/2) * Math.sin(dLong/2);
        var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
        return R * c;
    }
    
    function generateList(data)
    {
        for(var i=0; i<data.lenght; i++)
        {
            var element = data[i];
            //var element = document.getElementById('afstand');
            //element.innerHTML = 'afstand: ' + element.Distance.toFixed(3);
    
            $('.greenfluxlist').append('<li id="' + element.Identifier + '"><a href="Details.html?id=' + element.Identifier + '" rel="external">' + element.Naam + ' ' + element.Plaats +  '<p> <br/>' + element.Adres + ',<br/> ' + element.Postcode + ' ' + element.Plaats + '<br/> Status: ' + element.Status +  '</p> <span class="ui-li-count">' + element.Distance.toFixed(3) + '</span></a></li>');
        }
    }
    
    for(var i=0; i<myData.length; i++)
    {
        myData[i].Distance = calculateDistance(myData[i]);
    }
    
    myData.sort(function(a,b) {
        return a.Distance > b.Distance;
    });
    
    generateList(myData);
    
    函数计算状态(元素)
    {
    var R=6371;//地球的平均半径,单位为km
    var dLat=拉德(元素纬度-纬度1);
    var dLong=rad(element.Longitude-long1);
    变量a=Math.sin(dLat/2)*Math.sin(dLat/2)+
    Math.cos(rad(lat1))*Math.cos(rad(element.lation))*Math.sin(dLong/2)*Math.sin(dLong/2);
    var c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));
    返回R*c;
    }
    函数生成列表(数据)
    {
    
    对于(变量i=0;i带有“有序列表”你是说html OL?你需要它按特定的顺序吗?是的,例如,如果第一个标识符为1的json代码有20公里,第二个标识符为10公里,那么第二个标识符的信息需要放在
      列表的顶部。我想这不是我需要的。为什么不?也许我不理解这个问题,但我认为这是你需要的。你需要吗您需要对代码的作用进行澄清吗?