Los objetos ARRAY en javascript tienen métodos que vienen "de serie".
Uno de ellos se llama SORT.
Por ejemplo
Var miArray=["bbb","aaa","ccc"];
miArray.sort();
Te lo ordena a ["aaa","bbb","ccc"].
Pero el problema es que si el array contiene otro tipo de dato primitivo, como numeros enteros o decimales, la ordenación la hará como si fueran cadenas.
Asi que un array [9,30,5] te lo ordenaría a [30,5,9]. Además, si el array contiene objetos, los resultados, ya no sé ni qué pasaría (incluso es posible que de error).
Asi que los linces que diseñaron esa función sort pensaron "Pues qué coño, que SORT acepte una función, donde se reciban dos argumentos, A y B.
Si el elemento A va antes que B, que devuelva un TRUE. Si B va antes que A, que devuelva un FALSE. La función SORT comparará todos con todos, y cuando se devuelve un TRUE, mete al elemento A en el sitio de B, y al elemento B en el sitio de A.
Así, yo ahora puedo decirle a SORT cómo ordenar mi array.
Por ejemplo:
var miArray=[3,4,1];
miArray.sort(function(a,b){ return a-b; });
Cuando se devuelve un número entero, y se trata como si fuera un booleano, el 1 o más es TRUE. El 0 y cualquier número negativo es FALSE.
Asi que el sort de antes me devolverá [1,3,4].
Y por último, en vez de meter yo directamente una función en la llamada al sort, puedo crearla aparte (para utilizarla en otros sitios) y simplemente pasársela como argumento al SORT.
Como EXTRA final, esa función array no funciona demasiado bien. Mucho mejor, utiliza ésta otra:
Código Javascript
:
Ver originalArray.prototype.mezclar= function() {
var n=this.length;
while(n--)
{
var i=Math.floor(n*Math.random());
var tmp =this[i];
this[i]=this[n];
this[n]=tmp;
}
return this;
}
//Luego donde quieras
var miArray=["aaaaaaa","bbbbbbbbbbb","ccccccccccc","ddddddddddd"];
miArray.mezclar();
El asunto se discutió en:
http://www.forosdelweb.com/f13/duda-...uffle-1017974/