2010-10-07 28 views
27

Böyle bir çok boyutlu bir dizi oluşturduktan sonra nasıl sıralayabilirim?Javascript: çok boyutlu dizi sırala

varsayıldığında 'belirteçler' daha önce tanımlandığı gibidir: Yukarıdaki Örneğin

var location = []; 
for (var i = 0; i < markers.length; i++) { 
    location[i] = {}; 
    location[i]["distance"] = "5"; 
    location[i]["name"] = "foo"; 
    location[i]["detail"] = "something"; 
} 

, ben mesafe "ile sıralamak gerekir. Sıralama dizileri ve çok boyutlu dizilerle ilgili başka sorular gördüm, ancak hiçbiri bunun için işe yaramıyor.

cevap

44
location.sort(function(a,b) { 

    // assuming distance is always a valid integer 
    return parseInt(a.distance,10) - parseInt(b.distance,10); 

}); 

JavaScript'ın en array.sort yöntemi özel bir karşılaştırma için bir fonksiyon referans isteğe bağlı bir parametre, yer alır. geri dönüş değerleri b anlamına gelen >0, a ve b değerleri 3 ve anlamına gelir.

+0

Bu, "mesafe" bir ondalık ("964.543" gibi) olmasına rağmen, parseInt'in kaldırılması gerektiğinden işe yaradı, aksi halde sıralama ondalık noktadan sonra doğru değildi. – Jeff

+5

@Deca 'parseFloat (a.distance)' bu durumda uygun olurdu. – lincolnk

+1

Ah! Teşekkürler lincolnk! – Jeff

10

Bunu denediniz mi?

location.sort(function(a,b) { 
    return a.distance - b.distance; 
}); 
+0

Bu hile yaptı, teşekkür ederim. – Jeff

1

şimdiye kadar çalışması gerektiğini yayınlanmıştır Hem sıralama fonksiyonları, ama asıl sorun zaten sistem tanımlı olduğu gibi bir değişken olarak location kullanarak olacak.

+3

+1 iyi nokta. Ama bu gerçekten bir cevap değil ... :) Onlardan birine yorum yapmalısınız. – galambalazs

+0

"location" gerçek var adı değil, bu yüzden oradayız. – Jeff

İlgili konular