Foros del Web » Programando para Internet » Javascript »

Duda con sort()

Estas en el tema de Duda con sort() en el foro de Javascript en Foros del Web. Hola, seguramente es una pavada. Si tengo este array: Código HTML: var participantes = new Array(); participantes.push({nombre:"Pepe", puntos:5}); participantes.push({nombre:"Juan", puntos:30}); participantes.push({nombre:"Manolo", puntos:20}); y quiero ordenar ...
  #1 (permalink)  
Antiguo 03/06/2008, 12:04
Avatar de FantasmaFito  
Fecha de Ingreso: junio-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 118
Antigüedad: 16 años, 10 meses
Puntos: 0
Duda con sort()

Hola, seguramente es una pavada. Si tengo este array:

Código HTML:
var participantes = new Array();
participantes.push({nombre:"Pepe", puntos:5});
participantes.push({nombre:"Juan", puntos:30});
participantes.push({nombre:"Manolo", puntos:20});
y quiero ordenar en el navegador los participantes de acuerdo a la cantidad de puntos que tiene cada uno, de mayor a menor, osea:

Juan: 30 puntos
Manolo: 20 puntos
Pepe: 5 puntos

¿Cómo lo logro? Estuve probando un document.write(participantes.sort()); un participantes.sort.puntos; un participantes.puntos.sort(); pero nada de eso funciona

Alguien me podría dar una mano...
  #2 (permalink)  
Antiguo 03/06/2008, 12:47
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda con sort()

Para ordenarlo usa:
Código:
participantes.sort(function(a,b) { return b.puntos - a.puntos });
Ah, y para escribirlo no te vale con document.write(participantes); tendrás que recorrer el array. Algo como...

Código:
var participantes = new Array();
participantes.push({nombre:"Pepe", puntos:5});
participantes.push({nombre:"Juan", puntos:30});
participantes.push({nombre:"Manolo", puntos:20});

participantes.sort(function(a,b) { return b.puntos - a.puntos });

var result = "";
for (i=0;i<participantes.length;i++) {
result += participantes[i].nombre + ": " + participantes[i].puntos +"\n";
}
document.write(result);
  #3 (permalink)  
Antiguo 03/06/2008, 13:11
Avatar de FantasmaFito  
Fecha de Ingreso: junio-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 118
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Duda con sort()

Bueno, me costó un poquito entender lo que hacía el sort() pero ya está.

Muchísimas gracias venkman!!!
  #4 (permalink)  
Antiguo 03/06/2008, 13:20
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda con sort()

A sort() le puedes pasar como parámetro una función. Esa función recibe dos objetos a y b y tiene que devolver <0, 0 o >0, que significan respectivamente que a va antes que b, que da igual o que a va después que b.
  #5 (permalink)  
Antiguo 03/06/2008, 13:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Duda con sort()

Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin t&iacute;tulo</title>
</head>
<script type="text/javascript">

function sortNumber(a,b)
{
return a - b;
}

var arr = new Array(6);
arr[0] = "Jani";
arr[1] = "Hege";
arr[2] = "Stale";
arr[3] = "Kai Jim";
arr[4] = "Borge";
arr[5] = "Tove";

document.write(arr + "<br />");
document.write(arr.sort() + "<br />");

arr = new Array(6);
arr[0] = "10";
arr[1] = "5";
arr[2] = "40";
arr[3] = "25";
arr[4] = "1000";
arr[5] = "1";

document.write(arr + "<br />");
document.write(arr.sort(sortNumber) + "<br />");

var participantes = new Array();
participantes.push({nombre:"Pepe", puntos:5});
participantes.push({nombre:"Juan", puntos:30});
participantes.push({nombre:"Manolo", puntos:20});

document.write(participantes + "<br />");
document.write(participantes.sort(sortNumber));


</script>
<body>
</body>
</html> 
Funciona perfectamente en matrices unidimencionales pero no en una bidimensional como la que nos das de ejemplo, para ello deberias buscar algun algoritmo de ordenacion puesto que le debes decir que ordene por el segundo elemento del "subarray".

Un array bidimensional o multi dimensional en javascript no es mas que un array unidimensional que en cada elemento guarda otro array unidimensional... no se si me explico.

Voy a ver si te encuentro algo... mientras busca por Quicksort JavaScript
o algoritmo de ordenación....

Quim
  #6 (permalink)  
Antiguo 03/06/2008, 14:05
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda con sort()

Quim, no sé si lo has visto pero es tan sencillo como pasarle a sort una: function(a,b) {return a.puntos-b.puntos;}
  #7 (permalink)  
Antiguo 03/06/2008, 15:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Duda con sort()

Nada que me he tirado un buen rato mirando cosas y no he visto la solucion dada...

Bueno ahora hemos aprendido todos... disculpad.

Quim
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 19:49.