2010-10-07 31 views
27

Después de crear una matriz multi-ten como esta, ¿cómo la ordeno? ya está definidoJavascript: ordena matriz multidimensional

Suponiendo 'marcadores':

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

Para el ejemplo anterior, I necesidad de clasificar por 'distancia'. He visto otras preguntas sobre cómo ordenar matrices y matrices multidim, pero ninguna parece funcionar para esto.

Respuesta

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

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

}); 

método de Javascript array.sort tiene un parámetro opcional, que es una referencia a una función de una costumbre comparar. los valores de retorno son >0 que significa b primero, 0 que significa a y b son iguales, y <0 que significa a primero.

+0

Esto funcionó, aunque "distancia" era un decimal (como "964.543") por lo que parseInt tuvo que ser eliminado, de lo contrario la clasificación no era precisa más allá del punto decimal. – Jeff

+5

@Deca 'parseFloat (a.distance)' sería apropiado en ese caso. – lincolnk

+1

¡Ah! Gracias lincolnk! – Jeff

10

¿Has probado esto?

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

Esto hizo el truco, gracias. – Jeff

1

Ambas funciones de clasificación publicados hasta ahora debería funcionar, pero su principal problema va a ser el uso de location como una variable, ya que ya está definida por el sistema.

+3

+1 buen punto. Pero en realidad no es una respuesta ... :) Deberías haber comentado sobre uno de ellos. – galambalazs

+0

"ubicación" no es el nombre real de la var, así que estamos bien allí. – Jeff

Cuestiones relacionadas