El método Array.prototype.sort es ordenar la matriz. Este método toma un parámetro de función para especificar la regla de clasificación.
Primero veamos la aplicación simple de clasificación:
vararr=[2,1,3,4];
alert(arr.sort()) // [1,2,3,4] Organizar de pequeño a grande
// Ahora organizar de grande a pequeño para obtener [4,3,2,1]
alert(arr.sort(function(left,right){return left>right?-1:1}))
//Aquí, el método de clasificación utiliza el valor de retorno 1 o -1 de la función de parámetro para decidir si ordenar en orden o en orden inverso
. ¿Recuerdas lo que te dije antes sobre el uso del método Function.apply para obtener el elemento más grande de una matriz?
El artículo utiliza dos métodos diferentes para obtener el valor máximo en una matriz.
ordenar
también puede lucirse.
var minValue=arr.sort()[0];
var maxValue=arr.sort()[arr.length-1] // ¿Qué tal arr.sort().pop()
? Este también es un método de implementación alternativo. No es necesario escribir un recorrido de bucle.
Sin embargo, debo señalar que este método es el menos eficiente. Aún puedes utilizar esta técnica para matrices con docenas o cientos de elementos.
Sin embargo, si la matriz es muy grande, usar el método sort() puede ser tan lento que te dan ganas de fumar
. Más información sobre ordenamiento de estructuras de datos complejas.
1. Ordenar matrices multidimensionales
vararr=[
[2,1,55,4],
[5,3,22,3],
[1,2,77,2],
[9,4,33,5],
];
alert("Ordenado por defecto por primera columnan"+arr.sort().join("n"))
alert("Ahora ordenar por la tercera columnan"+arr.sort(function(left,right){return left[2]>right[2]?1:-1}).join("n"))
alert("Ahora ordene en orden inverso por la tercera columnan"+arr.sort(function(left,right){return left[2]>right[2]?-1:1}).join("n ") )
2. Ordenar estructuras de datos complejas
Array.prototype.each=function(f){for(var i=0;i<this.length;i++) f(this[i],i,this)}
function showName(item){alert(item.name)} //Imprimir nombre
var arr=[
{nombre:"factura",dinero:500},
{nombre:"go_rush",dinero:400},
{nombre:"dudu",dinero:9000}
];
// Muestra dudu, bill, go_rush en orden. Parece que dudu es el más rico y yo el más pobre.
arr.sort(function(left,right){return left.money>right.money?-1:1}).each(showName)
3. Ordenando la tabla, ayer hablé sobre este tema con todos.
Ver también:
http://www.cnblogs.com/ashun/archive/2006/11/30/appendChild_table_sort.html
Clasificación de tablas más compleja (también usando la función de clasificación de Array):
http://community.csdn.net/expert/Topicview2.asp?id=5174915
4. Hay una extensión muy inteligente para ordenar en Protype.js. Veamos su código primero:
1 sortBy: function(iterator) {.
2 devuelve this.collect(función(valor, índice) {
3 return {valor: valor, criterios: iterador (valor, índice)};
4 }).sort(función(izquierda, derecha) {
5 var a = criterios.izquierdos, b = criterios.derechos;
6 devolver a < b ? -1 : a > b 1 : 0;
7 }).pluck('valor');
8},
Este sortBy le permite pasar una función, ejecutar la función con cada elemento de la matriz como parámetro y finalmente ordenar los resultados devueltos por la función.
Permítanme desglosar su función a continuación.
El método de recopilación es en realidad el método del mapa.
Array.prototype.map=función(f){
for(var i=0;ret=[];i<this.length;i++) ret[i]=f(this[i],i,this)
regresar
}
Por ejemplo, ahora
arreglo=[2,1,4,3]
iterator=function(x){return x*x}
Puede obtener dicha matriz en 1-3 líneas de código
[
{valor:2,criterios:4},
{valor:1,criterios:1},
{valor:4,criterios:16},
{valor:3,criterios:9}
]
4-6 líneas de código ordenan la matriz según criterios: de pequeña a grande. Después de ordenar, obtenemos.
[
{valor:1,criterios:1},
{valor:2,criterios:4},
{valor:3,criterios:9},
{valor:4,criterios:16}
]
La línea 7 del código es la más simple. Toma el atributo de valor de cada elemento y finalmente obtiene [1,2,3,4] para implementar sortBy(function...) para ordenar arr.
Tal vez mi capacidad de expresión lingüística sea limitada. Cuando hablo de sortBy en prototipo.js, simplemente no sé cómo expresarlo con palabras.
¡Realmente lamento que todos tengan que trabajar tan duro para leer el código explicativo que escribí
http://www.cnblogs.com/ashun/archive/2006/12/01/sort_sortby_array_prototype.html
!