0

次のハードコードされた 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"}
                  ];

このjsonは、ios phonegapアプリで使用しています.Jsonのコードの各行は、オランダのポイントです..電話がある場所とjsonからの緯度と経度の間の距離を計算する関数を構築しようとしています..最終的に、これらの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);

        }

私の問題は今、順序付きリストを作成するにはどうすればよいですか、すべてを配列に入れてからループすることは可能ですか、それとも何か別の方法がありますか?簡単な解決策が必要だと思いますが、わかりません.

4

1 に答える 1

1

配列をソートするには、sortメソッドを使用します。

最初に距離を計算し、次に配列をソートしてから、リストを生成する必要があります。このようなもの:

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);
于 2012-10-16T09:51:05.080 に答える