Foros del Web » Programando para Internet » Javascript »

duda con una funcion

Estas en el tema de duda con una funcion en el foro de Javascript en Foros del Web. hola a todos espero me pudieran explicar este codigo que encontre para hacer un random de un array solo que tengo algunas dudas Código: function ...
  #1 (permalink)  
Antiguo 22/10/2012, 10:36
Avatar de saseisa  
Fecha de Ingreso: agosto-2006
Mensajes: 329
Antigüedad: 17 años, 8 meses
Puntos: 9
Pregunta duda con una funcion

hola a todos espero me pudieran explicar este codigo que encontre para hacer un random de un array solo que tengo algunas dudas

Código:
  	    function shuffle(a, b)
{
   return Math.random() > 0.5 ? -1 : 1;
}

var keywords = ["xbox", "ps3", "xcube", "wii", "pc"];

var rm = keywords.sort(shuffle); 

alert(rm);
pregunta porque la funcion shuffle recibe 2 parametros y de donde los recibe???
pregunta 2 me podrian explicar un poco mejor esto "Math.random() > 0.5 ? -1 : 1"

desde ya gracias
  #2 (permalink)  
Antiguo 22/10/2012, 11:42
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: duda con una funcion

buenas,
primero debes comprender qué hace la función sort. básicamente sort ordena un array en orden ascendente (de menor a mayor). pero qué pasa si queremos ordenar por otro orden, por ejemplo descendente o algún otro orden peculiar que no sea el defacto. para ello, sort admite un parámetro: una función. ¿qué hace sort con esa función? internamente sort invoca la función provista pasandole dos argumentos. dichos argumentos corresponden a dos índices del array. esta función vendría siendo el algoritmo que define como ordenar los elementos del array. el algoritmo lo defines tu mismo, lo importante es que como resultado debe devolver uno de tres valores: -1, 0, 1. cada valor le indica a sort como debe ordenar los elementos comparados, significan: -1 el elemento va antes, 0 el elemento se queda igual, y 1 el elemento va despues.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 22/10/2012, 11:49
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: duda con una funcion

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 original
  1. Array.prototype.mezclar= function() {
  2. var n=this.length;
  3.      while(n--)
  4.      {
  5.          var i=Math.floor(n*Math.random());
  6.          var tmp =this[i];
  7.          this[i]=this[n];
  8.          this[n]=tmp;
  9.     }
  10.     return this;
  11. }
  12.  
  13.  
  14. //Luego donde quieras
  15. var miArray=["aaaaaaa","bbbbbbbbbbb","ccccccccccc","ddddddddddd"];
  16. miArray.mezclar();

El asunto se discutió en:
http://www.forosdelweb.com/f13/duda-...uffle-1017974/
  #4 (permalink)  
Antiguo 22/10/2012, 12:39
Avatar de saseisa  
Fecha de Ingreso: agosto-2006
Mensajes: 329
Antigüedad: 17 años, 8 meses
Puntos: 9
Respuesta: duda con una funcion

pues muchas gracias a los dos por su explicacion me dieron mas idea de como funciona esto

gracias

Etiquetas: funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:38.