2010-10-07 17 views
27

Dopo aver creato una matrice multi-dimensionale come questa, come posso ordinarla? è già definitaJavascript: ordina la matrice multidimensionale

Supponendo 'marcatori':

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

Per l'esempio precedente, ho bisogno di risolvere da 'distanza'. Ho visto altre domande sull'ordinamento di array e array multi-dim, ma nessuno sembra funzionare per questo.

risposta

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

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

}); 

metodo javascript array.sort ha un parametro opzionale, che è un riferimento per la funzione di una consuetudine confrontare. i valori di ritorno sono >0 che significa b prima, 0 che significa a e sono uguali e <0 significa a prima.

+0

Questo ha funzionato, anche se "distanza" era un decimale (come "964.543") quindi è necessario rimuovere parseInt, altrimenti l'ordinamento non era accurato oltre il punto decimale. – Jeff

+5

@Deca 'parseFloat (a.distance)' sarebbe corretto in questo caso. – lincolnk

+1

Ah! Grazie, lincolnk! – Jeff

10

Hai provato questo?

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

Questo ha fatto il trucco, grazie. – Jeff

1

Entrambe le funzioni di ordinamento postato finora dovrebbe funzionare, ma il problema principale sta per essere utilizzando location come una variabile in quanto è già definito il sistema.

+3

+1 buon punto. Ma non è davvero una risposta ... :) Avresti dovuto commentare uno di loro. – galambalazs

+0

"location" non è il nome var effettivo, quindi siamo a posto. – Jeff

Problemi correlati